作业帮 > 综合 > 作业

C语言 一个整数的“反置数”指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数.如果一个整数的末尾是以0结尾,那

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/21 09:01:32
C语言
一个整数的“反置数”指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数.如果一个整数的末尾是以0结尾,那么在它的反置数当中,这些0就被省略掉了.比如说,1245的反置数是5421,而1200的反置数是21.请编写一个程序,输入两个整数,然后计算这两个整数的反置数之和sum,然后再把sum的反置数打印出来.要求:由于在本题中需要多次去计算一个整数的反置数,因此必须把这部分代码抽象为一个函数的形式.
输入格式:输入只有一行,包括两个整数,中间用空格隔开.
输出格式:输出只有一行,即相应的结果.
输入输出样例
\x05输入样例:
\x05\x05435 754
输出样例:
\x05\x05199
#include
#include
#include
char posit(char str[],int n);
char del(char str[],int n);
int num(char str[],int n);
int main()
{
char str1[100] = {0},str2[100] = {0},str[100] = {0};
int len1,len2,len,num1,num2,sum,i;
scanf("%s",str1);
scanf("%s",str2);
len1 = strlen(str1);
len2 = strlen(str2); //输入,求长.
posit(str1,len1);
posit(str2,len2); //取反
num1 = num(str1,len1); // 求和
num2 = num(str2,len2);
sum = num1 + num2;
for(i = 0; ; i++) //这一步有问题了
{
str[i] = sum % 10;
sum = sum / 10;
if(sum == 0) break;
}
len = strlen(str);
posit(str,len);
del(str,len);
printf("%s",str);
system("pause");
return 0;
}
char posit(char str[],int n)
{
int i,j,t;
for (i = 0,j = (n-1); i = 0; i--)
{
num = num + ((str[i] - '0') * mul);
mul = mul * 10;
}
return num;
}
试过,应该就是标记的那一步有问题~不过自己又看不出问题是什么
恩 确实是注释的那一部分有错了
是一个小小的错
sum%10是十进制 要想对应ascii码中的那个数 需要加上‘0’或48(‘0’的ascii码)
也就是0要转换成‘0’ 1转换成‘1’.
改正:
for(i = 0; ; i++)
{
str[i] = sum % 10+'0'; //或str[i] = sum % 10+48;
sum = sum / 10;
if(sum == 0) break;
}
下面是我写的程序,供参考:
#include
#include
int inverse(int m);
int inverse_sum(int a,int b);
int main()
{
\x05int a,b,sum;
printf("请输入两个正整数,两数中间空一格:\n");
\x05scanf("%d %d",&a,&b);
printf("两者的反置数的和是:\n");
\x05sum=inverse_sum(a,b);
\x05sum=inverse(sum);
\x05printf("%d\n",sum);
return 0;
}
int inverse(int m)
{
\x05char str[6];
\x05int i,j;
\x05i=0;
\x05while(m)
\x05{
\x05\x05str[i++]=m%10+'0';
\x05\x05m/=10;
\x05}
\x05str[i]='\0';
\x05j=atoi(str);
\x05return (j);
}
int inverse_sum(int a,int b)
{
\x05int j,k;
\x05j=inverse(a);
\x05k=inverse(b);
return j+k;
}