常见ASCII码有 :
'0' -> 48 , 'a' - > 97 , 'A' - > 65 , '\0' - >0
题目描述
在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。
比如:248×15=3720
把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是 1 位数,得
2 + 4 + 8 = 14 ==> 1 + 4 = 5
1 + 5 = 6;
5×6而结果逐位求和为 3。5×6 的结果逐位求和与 3 符合,说明正确的可能性很大!!(不能排除错误)
请你写一个计算机程序,对给定的字符串逐位求和。
输入描述
输入描述
输入为一个由数字组成的串,表示 n (n<1000) 位数;
输出描述
输出为一位数,表示反复逐位求和的结果。
思路:运用ASCII解决,我们可以发现 0 的ASCII码是 48 ,与它做差便可转化为int型的数值 :例如 1 的 ASCII为49 减去 48 得 1 对应的就是int的1,依次类推,差值与存储在字符数组在数值是相等的,就可以转化为我们平常使用的求模运算,进行各位相加操作;
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
char ch[1010];
int main(int argc, char *argv[])
{
// 请在此输入您的代码
scanf("%s",ch);
int m = strlen(ch);
int sum = 0;
for(int i = 0 ; i < m; i++) // 0 的ASCII码是 48 ,与它做差便可转化为int型的数值 :1 的 ASCII为
// 49 减去 48 得 1 对应的就是int的1
{
sum += ch[i] - 48;
}
while(sum>10) // ans是中间变量,用来记录各位取和后的sum的值,达到sum进行多次求和操作
{
int ans = 0 ;
while(sum){
int t = sum %10;
ans += t;
sum /= 10;
}
sum = ans;
}
printf("%d",sum);
return 0;
}