整数的时候20位数的数翻转不了
查看原帖
整数的时候20位数的数翻转不了
1131296
cjy273386楼主2023/11/11 17:03
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
unsigned long long int  reverse(unsigned long long int  num) {
    unsigned long long int  reversed = 0;
    while (num != 0) {
        int digit = num % 10;
        num /= 10;
        reversed = reversed * 10 + digit;
    }
    return reversed;
}
int main(void)
{   
   char c[30];
   scanf("%s",c);
    int condition=1;
    int length=strlen(c);
    int location;
    for (int i=0;i<length;i++){
            if(c[i]=='.'){
                condition=2;
                location=i;
                break;
            }
            else if(c[i]=='/'){
                condition=3;
                location=i;
                break;
            }
            else if(c[i]=='%'){
                condition=4;
                location=i;
                break;
            }
    }
        int result=0;
        switch(condition){
        case 1:
            unsigned long long int  num=atoll(c);
            printf("%llu",reverse(num));
        break;
        case 2:
            char num1[11],num2[11];
            for (int i=0;i<location;i++){
                num1[i]=c[i];
            }
            for (int j=location+1;j<length;j++){
                num2[j-location-1]=c[j];
            } 
        unsigned long long int output1=atoll(num1),output2=atoll(num2);
        printf("%llu.%llu",reverse(output1),reverse(output2));
        break;
        case 3:
            char num3[11],num4[11];
            for (int i=0;i<location;i++){
                num3[i]=c[i];
            }
            for (int j=location+1;j<length;j++){
                num4[j-location-1]=c[j];
            } 
        unsigned long long int  output3=atoll(num3),output4=atoll(num4);
        printf("%llu/%llu",reverse(output3),reverse(output4));
        break;
        case 4:
            c[length-1]='\0';
            unsigned long long int  num5=atoll(c);
            printf("%llu%%",reverse(num5));
            break;
        }

   return 0;
}

求助,第三点过不去,自己随便测了一下,19位数的能成功,20位数的不行,我不知道第三个测试点是什么数,已经用unsigned longlong int了

2023/11/11 17:03
加载中...