C语言整数分解

思路:先获取x的位数,并确定位数对应的10的n次方,定义为i,用x不断除以i获取首位并输出,并用x%i的方式丢弃首位,i/=10不断对应x的位数,直到i已经不足10。

难点:这题其实分为三个小题:如何得到x的位数,如何得到x的首位,什么时候结束循环?要分成小个小题分别写出代码,同时,x作为本题中唯一一个输入变量,不能在第一次循环中就“消耗”掉x,要用新的变量替代。

特别要考虑如1-9这些个位数,10、20这些末尾为0的数输出结果,多用断点进行测试。

把思路也写在注释里面了。

#include <stdio.h>

int main() {
	int x;
	scanf("%d", &x);

	int i = 1 ;
	int t = x;//因为后续还会用到x,所以用新变量t去保存x的位数
	
//  思路:用/10的方式不断丢弃最低位,每丢弃一次i*10计算t的位数
//	12345/10=1234
//	i*10=10
//	1234/10=123
//	i*10=100
//	123/10=12
//	i*10=1000
//	12/10=1
//	i*10=10000
	while (t > 9) {//要注意设置循环条件应为t>9
		t /= 10;
		i *= 10;
	}
	
	//	思路:从最高位开始分解如12345
	//	12345/10000=  得到1  <<定义一个新的变量去保存这个数
	//	12345%10000=2345
	//	10000/10=1000
	//	2345/1000=  得到2
	//	2345%1000=345
	//	1000/10=100
	//	345/100=  得到3
	//	345%100=45
	//	100/10=10
	//	45/10=  得到4
	//	45%10=5
	//	10/10=1
	//	5/1=  得到5
	//	5%1=5
	//	1/10=0
	do {
		int d = x / i;
		if (i >= 10) {
			printf("%d-", d);//在最后一次输出前,i>=10,输出要带一个短横
		} else {
			printf("%d", d);//最后一次输出时,i已经变成1,输出不带短横
		}
		x %= i;//用%去丢掉x的首位
		i /= 10;//i要和x的位数保持同步,所以每次除以10
	} while (i > 0);

	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值