比如说 输入1234568 则输出1 2 3 4 5 6 8 29
这里的29就是 1+2+3+4+5+6+8=29
#include <stdio.h>
int main()
{
int a=0;
scanf_s("%d", &a);
int x, sum=0;
while (a>0)
{
x = a % 10;
sum = sum * 1 + x;
printf("%d ",x);
a = a / 10;
}
printf("%d", sum);
return 0;
}
上述的代码段 是输入任一数字 然后倒序输出也就是 如果输入123456 则输出6 5 4 3 2 1 21
对于70000也是 符合的 会输出0 0 0 0 7 7
那么我想 对于正序的 是不是我做两次倒序就行了呢
于是我做出来下面这么个程序
#include <stdio.h>
int main()
{
int a=0,b=0;
scanf_s("%d", &b);
int quyu, sum=0,r,result=0;
while (b > 0)
{
r = b % 10;
result = result * 10 + r;
b = b / 10;
}
a = result;
while (a>0)
{
quyu = a % 10;
sum = sum * 1 + quyu;
printf("%d ", quyu);
a = a / 10;
}
printf("%d", sum);
return 0;
}
表面上看这个程序运行是没有问题的 但是 一旦碰到了 70000这样的数字 那么输出格式就发生了错误 也就是说输出7 7 而不是我们想要的 7 0 0 0 0 7
#include <stdio.h>
int main()
{
int a,sum=0,t,m=1,d;
scanf_s("%d", &a);
t = a;
for (; a > 0;)
{
a = a / 10;
m = m * 10;
}
m = m / 10;
while (t > 0) {
d = t / m;
printf("%d ", d);
sum = sum * 1 + d;
t = t % m;
m = m / 10;
}
printf("%d", sum);
return 0;
}
换了一个思考方式 写了一下午 但是还是失败。
分析一下 我们不难发现 while (t>0)这个条件判断导致了7000 没法变成 7 0 0 0
也就是说在7000/1000之后 7000再对1000取余数 得到了0 t=t%m=0 则while语句判断是t=0
就不会在执行。
稍微做一下改动 ,让循环判断的条件变成m>0 那就运行ok了。
#include <stdio.h>
int main()
{
int a,sum=0,t,m=1,d;
scanf_s("%d", &a);
t = a;
for (; a > 0;)
{
a = a / 10;
m = m * 10;
}
m = m / 10;
while (m > 0) {
d = t / m;
printf("%d ", d);
sum = sum * 1 + d;
t = t % m;
m = m / 10;
}
printf("%d", sum);
return 0;
}
程序的完善,就像一个人逐渐进步。挺好玩的
更多推荐
#自学c语言输入任一数字 然后正序/倒序输出 并且计算每一位的和
发布评论