|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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) 环境下编译通过。
|
|