|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- typedef long long ll;
- //求最大公约数
- ll f1(ll a, ll b) {
- ll t = 0;
- while (b) {
- t = a % b;
- a = b;
- b = t;
- }
- return a;
- }
- int main() {
- ll a, b, t, temp;
- if(scanf("%lld", &a)==1)
- {
-
- //scanf("%lld", &a);
- temp = getchar();
-
- if (temp == '\n') {
- printf("[%lld]\n", a);
- return 0;
- }
-
- else {
- if (temp == '/') {
- if(scanf("%lld", &b)!=1)
- return 0;
- }
- else if (temp == '.') {
- [color=Lime]for (b = 1; ((temp = getchar()) !='\n'); b *= 10) {
- a = temp - 48 + a * 10;//字符串转换为数值 [/color]
- }
- }
- if (a&&b) {
- t = f1(a, b);
- if (t == b) {//如果最大公约数是b
- printf("[%lld]\n", a / t);
- return 0;
- }
- else {
- printf("[%lld/%lld]\n", a / t, b / t);
- return 0;
- }
- }
- else {
- puts("[0]");
- return 0;
- }
- }
- }
-
- }
复制代码
我提交以后它显示;
warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result。
scanf的返回值正在被忽略。
我输入2.a;结果是[69/10]他把a这样的非数字类型字符也转换成有理数了T T,怎么修改??
之前的帖不能回复了,重发一下
本帖最后由 永恒的蓝色梦想 于 2020-5-23 15:18 编辑
这不简单? - #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- typedef unsigned long long ull;
- ull gcd(ull a, ull b) {
- ull t = 0;
- while (b) {
- t = a % b;
- a = b;
- b = t;
- }
- return a;
- }
- int main() {
- char temp;
- unsigned long long a, b, t;
- bool flag;
- for (;;) {
- if ((temp = getchar()) == '\n') {
- continue;
- }
- else if (temp == '-') {
- flag = true;
- a = 0;
- }
- else if (temp == '+') {
- flag = false;
- a = 0;
- }
- else {
- flag = false;
- a = temp - 48;
- }
- for (;; a = a * 10 + (temp - 48)) {
- temp = getchar();
- if (temp == '\n') {
- if (a) {
- if (flag) {
- printf("[-%llu]\n", a);
- }
- else {
- printf("[%llu]\n", a);
- }
- }
- else {
- puts("[0]");
- }
- break;
- }
- else if (temp == '/') {
- if (a) {
- if ((temp = getchar()) == '-') {
- flag = !flag;
- b = 0;
- }
- else if (temp == '+') {
- b = 0;
- }
- else {
- b = temp - 48;
- }
- while ((temp = getchar()) != '\n') {
- b = b * 10 + (temp - 48);
- }
- t = gcd(a, b);
- putchar('[');
- if (flag) {
- putchar('-');
- }
- if (b == t) {
- printf("%llu]\n", a / b);
- }
- else {
- printf("%llu/%llu]\n", a / t, b / t);
- }
- }
- else {
- puts("[0]");
- }
- break;
- }
- else if (temp == '.') {
- for (b = 1; (temp = getchar()) != '\n'; b *= 10) {
- a = a * 10 + (temp - 48);
- }
- t = gcd(a, b);
- putchar('[');
- if (flag) {
- putchar('-');
- }
- if (b == t) {
- printf("%llu]\n", a / b);
- }
- else {
- printf("%llu/%llu]\n", a / t, b / t);
- }
- break;
- }
- }
- }
- return 0;
- }
复制代码
|
|