比如说 输入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语言输入任一数字 然后正序/倒序输出 并且计算每一位的和