| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
题目描述: 
输入一个整数,你所需要做的是将其反转,输出的仍然是一个整数 
 
输入: 
第一行N表示将会有几个测试数据(N<=100);接下来的N行每行一个整数(每行得整数不超过100000000000)。 
 
输出: 
输出反转之后的整数,每行一个。 
- #include<stdio.h>
 
 - int main()
 
 - {
 
 -         int N,a[10],i,r;
 
 -         scanf("%d",&N);
 
 -         for(i=0;i<N;i++)
 
 -         {
 
 -                 scanf("%d",&a[i]);
 
 -         }
 
 -         for(i=0;i<N;i++)
 
 -         {
 
 -                 while(a[i]!=0)
 
 -                 {
 
 -                         r=a[i]%10;
 
 -                         printf("%d",r);
 
 -                         a[i]=a[i]/10;
 
 -                 }
 
 -                 printf("\n");
 
 -         }
 
 -         return 0;
 
 - }
 
  复制代码 
 本帖最后由 jackz007 于 2019-1-29 13:20 编辑 
    程序逻辑没有问题,只是 100000000000 已经超出了 int 所能表达值的范围(-2147483648 ~ 2147483647),正如楼上所说,数据大了会产生错误。
 
    解决方法:如果在 Linux64 系统上,可把 int 改为 long,如果是在 Linux32 或 Windows 系统下,则可把 int 改为 long long,下面的代码为在 Windows 下的改法。
 - #include <stdio.h>
 
  
- int main()
 
 - {
 
 -         long long  N , a[10] , i , r                    ;
 
 -         scanf("%lld" , &N)                              ;
 
 -         for(i = 0 ; i < N ; i ++) scanf("%lld" , &a[i]) ;
 
 -         for(i = 0 ; i < N ; i ++) {
 
 -                 while(a[i] != 0) {
 
 -                         r = a[i] % 10                   ;
 
 -                         printf("%lld" , r)              ;
 
 -                         a[i] = a[i] / 10                ;
 
 -                 }
 
 -                 printf("\n")                            ;
 
 -         }
 
 -         return 0                                        ;
 
 - }
 
 
  复制代码 
    此代码在 TDM-GCC 5.1.0 (MinGW32) 环境下编译通过。  
 
 
 |   
 
 
 
 |