习惯用ASCII解题(蓝桥杯:缩位取和)

本文介绍了一种利用ASCII码计算多位数逐位求和的方法,通过实例演示如何将字符数组转换为整数并应用在验证四则运算正确性的计算机程序中。通过`charch[]`数组和ASCII值的转换,展示了如何使用ASCII解决计算问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值