1. 程式人生 > >求整數的位數以及各位數之和

求整數的位數以及各位數之和

輸入一個正整數 repeat (0<repeat<10),做repeat 次下列運算:
輸入一個整數n(n<10^100),輸出它的位數以及各位數之和。

#include <stdio.h>

#include <string.h> //標頭檔案,對應程式碼下的函式strlen.
int main()
{
int repeat,i;
char s[200];//陣列要在for迴圈外定義,[]中的數字可以不受限制。
scanf("%d",&repeat);
for(i=0;i<repeat;i++)
{
scanf("%s",s);
int len =strlen(s);//數的個數等於陣列所佔的位數(無負號的情況下,要由if進行判斷)

    int sum,ans1;

    sum=0   

            if(s[0]!='-')//判斷有無負號,若有,所佔的位數減一才等於數的個數

            ans1=len;

    else
    ans1=len-1;
    for(int j=0;j<len;j++)//計算數的加和
    {
    if(s[j]!='-')//各個位數之和不包括‘-’號
    sum=sum+s[j]-48;//因為s[j]為字元陣列,多以s[j]代表的是一個字元,字元是可以轉換為數字的用的ASCII碼,0的ASCII碼是48,減去48,由字元變為數字,可以進行計算。
    }
    printf("number=%d,sum=%d",ans1,sum);
}
return 0;

}

解題思路:

輸入一個正整數 repeat (0<repeat<10),做repeat 次//用repeat,i,for迴圈進行下列運算

輸入一個整數n(n<10^100)//括號內的東西意味10的100次方,int,longlong的取值範圍都不夠,所以只能用字串進行讀取,輸出它的位數//位數可以用函式進行計算,不算‘-’,陣列所佔的位數即為輸入數字的位數,之後再對有無‘-’進行判斷;若不用新的函式,可以利用字串最後會自動加上''\0'的特點利用for迴圈進行判斷位數以及各位數之和//各位數之和由for迴圈完成,其中要排除負號的影響,因為s[j]為字元,所以用來加和時要減去48使字元變成對應的數字