C:如何分解整数(从末位往前取以及从首位往后取)
主要都是通过整除与取余来处理
1.从末位往前取
#include<stdio.h>
int main()
{
int num;
int num_1,num_2,num_3;
scanf("%d",&num);
num_1 = (num/1) % 10;
num_2 = (num/10) % 10;
num_3 = (num/100) % 10;
printf("%d",num_1 * 100 + num_2 * 10 + num_3 * 1);
}
在上述代码中,num_1表示个位,num_2表示十位,num_3表示百位,分别通过(num/1) % 10,(num/10) % 10以及(num/100) % 10来获得。
#include <math.h>
int main()
{
int sum = 0;
int number,last,cout = 1;
scanf("%d",&number);
while(number > 0)
{
last = number % 10;
if (last % 2 == (cout % 2))
{
sum += pow(2,cout-1);
cout ++;
}
else
{
sum += 0;
cout ++;
}
number = number / 10;
}
printf("%d",sum);
}
在上述的代码中,主要通过while(number > 0)以及number % 10和number/10来完成循环取值的运算
2.从首位往后取。这里用的是念数字的例子
int main()
{
int abs_num,num;
int digit = 0;
int deal_num;
int number;
scanf("%d",&num);
abs_num = abs(num);
deal_num = abs_num;
// 记住考虑零的情况
if (num == 0)
{
printf("ling");
}
while(deal_num > 0)
{
deal_num = deal_num / 10;
digit += 1;
}
for (digit; digit>0; digit--)
{
int num_10 = 1;
int digit_1 = 0; // digit_1用于内层循环
digit_1 = digit;
while(digit_1-1 > 0)
{
num_10 *= 10;
digit_1 = digit_1 - 1;
}
number = abs_num / num_10;
abs_num = abs_num - num_10 * number;
//digit表示位数
/*此时要解决的问题
1.得到首个数字 number
2.将首数字删去,得到后面的值
目前有num和digit 数字和位数,如何处理?
1.得到首数字:number = num / (10 * 10)
2.去掉首数字: num = 439 digit = 3,得到num = num - 10 * 10 * number 得到num = 39(3-1个digit)
所以得到 10*10最为重要
*/
//现在可以得到4 3 9,最后要解决的是最后一位没有空格的输出问题
if (num < 0)
printf("fu ");
num = abs(num); //只希望触发一次,触发后,直接将num变为绝对值,此时>0
if (digit > 1)
{
switch(number)
{
case(0):
printf("ling ");
break;
case(1):
printf("yi ");
break;
case(2):
printf("er ");
break;
case(3):
printf("san ");
break;
case(4):
printf("si ");
break;
case(5):
printf("wu ");
break;
case(6):
printf("liu ");
break;
case(7):
printf("qi ");
break;
case(8):
printf("ba ");
break;
case(9):
printf("jiu ");
break;
}
}
else
{
switch(number)
{
case(0):
printf("ling");
break;
case(1):
printf("yi");
break;
case(2):
printf("er");
break;
case(3):
printf("san");
break;
case(4):
printf("si");
break;
case(5):
printf("wu");
break;
case(6):
printf("liu");
break;
case(7):
printf("qi");
break;
case(8):
printf("ba");
break;
case(9):
printf("jiu");
break;
}
}
}
}
这里的核心思路
假设num为439
1.得到首数字:number = num / (10 * 10)
2.去掉首数字: num = 439 digit = 3,得到num = num - 10 * 10 * number 得到num = 39(3-1个digit)
那么就引出如何得到digit,这里的方法是每次num/10,digit++,一直循环至num == 0
posted on 2019-05-06 14:09 zhaoy_shine 阅读(555) 评论(0) 编辑 收藏 举报