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

输入一个正整数 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使字符变成对应的数字

猜你喜欢

转载自blog.csdn.net/xx1257gd/article/details/81047725
今日推荐