完成这个题目,首先想想该怎么去做。
我们知道一个数对10取余可以得到个位,除以十可以去掉个位,获得十位以上的数字
比如 12%10=2 12/10 = 1
所以我们可以根据这个方法写出这个程序,但是我们的数可能是3位
也可能是5位,所以我们还要思考怎么去获得这个数高位的权重
因为1234/1000 = 1
1234 的高位为1 ,权重为1000,所以明白了吧
开始敲代码!
1.前戏🙃🙃
int num = 0;//输入的数字
int tem = 1;//被除数
int count = 0;//计算一共有几位
int num1 = 0;//备用输入的数字
int ret = 0;//结果
printf("请输入\n");
scanf("%d",&num);
num1 = num;//将输入的数字备份
这里一定要先将输入的数字备份!!
2.最高位的获得
while(num>0)//当输入的数字大于零时执行
{
num/=10;//每次减少一位
count+=1;//计数器加一
}
当输入的数字被消耗光的时候,我们也得到了最高权重count
这就是上一步为什么要备份输入的数字!
3.主体
for(int i=1;i<=count;i++)//外部循环负责控制和打印
{
for(int j=i;j<count;j++)//内部循环负责控制被除数
{
//计算出每一位对应的权重(十进制)
//当i=1时,计算出1000,然后1234/1000=1
//以此类推
tem = tem*10;
}
ret = (num1/tem)%10;//结果的计算
//用备用输入的数除以首位的权重再取余可以得到首位
printf("%d\t",ret);
tem = 1;//将被除数复位
}
请看注释!!
完整代码演示
int main() {
int num = 0, tem = 1, count = 0, num1 = 0, ret = 0;
printf("请输入\n");
scanf("%d", &num);
num1 = num;
while (num > 0) {
num /= 10;
count += 1;
}
for (int i = 1; i <= count; i++) {
for (int j = i; j < count; j++) {
tem = tem * 10;
}
ret = (num1 / tem) % 10;
printf("%d\t", ret);
tem = 1;
}
}
我们可以看到 它能将我们输入的数字逐个打印出来
但是代码用了3个循环,量很大,能不能简化呢?
答案是可以的,往下翻
.
.
.
.
.
.
我们在计算最高位的权重的时候,是不是可以直接计算1000
然后下一个循环中逐个除以十呢?这样我们就直接省去了
一个循环,直接省去了许多代码,下面开始码!!
1.前戏🙃🙃
int num = 0,count = 0,num1=0,tem=1,ret= 0;
printf("请输入\n");
scanf("%d",&num);
num1=num;
跟上面的差不多
2.求高位权重
while(num>0)
{
count+=1;//计数器
tem*=10;//计算最高位权重
num/=10;//循环结束条件
}
在这里利用求最高位的权重下面就省略一个for循环
3.主体
for(int i=1;i<=count;i++)
{
tem/=10;//计算下一个最高位权重
printf("%d\t",(num1/tem)%10);
}
省去的只剩这点了,C语言就是要精简一点
完整代买演示
int main()
{
int num = 0,count = 0,num1=0,tem=1,ret= 0;
printf("请输入\n");
scanf("%d",&num);
num1=num;
while(num>0)
{
count+=1;//计数器
tem*=10;//计算最高位权重
num/=10;//循环结束条件
}
for(int i=1;i<=count;i++)
{
tem/=10;//计算下一个最高位权重
printf("%d\t",(num1/tem)%10);
}
}
。
。
。
。
。
那能不能再精简些呢
答案是可以的
这时我们可以用函数的递归来解决这个问题
void my_printf(int num)
{
if(num>9)
{
//当num大于9时,说明这是两位数,将他除以十放到下一个my_printf中
my_printf(num/10);//如此循环往复,就会<9就是最高位
}
printf("%d\t",num%10);//跳出来将最高位打印后开始往回走
}
int main()
{
int num = 0;
printf("请输入\n");
scanf("%d",&num);
my_printf(num);
}
你学废了吗🙃🙃🙃