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
轉載于:https://www.cnblogs.com/zhaoy-shine/p/10819297.html
總結
以上是生活随笔為你收集整理的C:如何分解整数(从末位往前取以及从首位往后取)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 统计单词
- 下一篇: Nginx的几个常用配置和技巧