c语言让一列数字相加怎么写,c语言怎么算三个数相加

首页 > 实用技巧 > 作者:YD1662024-01-27 00:26:47

我们都知道数列求和,数列求和就是给定一组数列,然后求和。

但今天这道题目呢,“数列求和-加强版”难度也提升了一个档次,我一拿到这道题目,其实可以说是无从下手,此时就需要慢慢梳理逻辑,把一条条逻辑给理顺了,解决这道题目也就没有那么困难了。

我们先来看看这道题目的要求:

1、给定某数字A,A满足大于等于1小于等于9,给定非负整数N,N满足大于等于0小于等于100000,求数列之和S=A AA AAA ... A...A(N个A)。

2、例如A=1,N=3时,S=1 11 111=123。

c语言让一列数字相加怎么写,c语言怎么算三个数相加(1)

梳理逻辑

1、给定数字A和非负整数N,要满足一定的要求,自然会用到一个scanf函数,以及用到条件语句来进行数值大小的判断。

2、打印输出N项数列之和S,S应该是用到一个数组来进行存储数据,并且S这个数组的元素数量是10000。

3、我们来仔细观察一下S=1 11 111=123这个状态,是不是可以分为个位数相加,十位数相加,百位数相加,这是不需要进位的情况下,但如果是需要进位的情况呢,是不是需要把个位数去与10比较,把十位数去与10比较,如果满足超过10,就会进位1位。

4、之后就要打印出结果,但可以发现,刚刚是按照顺序把所有结果给存储到数组里的,如果要打印结果的话,就得倒序打印。

5、因为我们在最开始定义的时候,整个S数组内的元素均为0,所以要先回溯到元素不为0的时候,再进行倒序打印。

代码实现

//数列求和-加强版 //基本思路:A (A*10 A) (A*100 A*10 A) #include <stdio.h> int main() {//变量初始化 int A;//数字A int N;//非负整数N int j=99999; int S[100000]={0};//N项数列,N的范围小于等于100000 scanf("%d %d", &A, &N); if(A>9||A<1||N<0||N>100000){//满足A和N的范围 scanf("%d %d", &A, &N); } else if(N == 0){//当N=0的时候,就说明是0个A相加,直接得到结果为0 printf("0"); } //当N不等于0的情况下,或者说除之前的情况外,就是剩下的情况 else if(N!=0){ for (int i = 0; i < N; i ){ S[i] = S[i] A * (N - i);//N=3,A=1的状态下:S0=3,S1=3 2*1 }//个位数相加,十位数相加,百位数相加 //进位,如果个位数/十位数/百位数相加进位满足超过10 for (int i = 0; i < 99999; i ) { if (S[i] >= 10){//如果求和超过10,那就需要进位 S[i 1] = S[i 1] S[i] / 10;//看是10的几倍,就加几 S[i] = S[i] % 10;//剩下的那个位数就是除以10取余 } } while(1){//回溯到不等于零的那个数 if(S[j--]!=0){ break; } } for (j ; j >= 0; j--){ printf("%d", S[j]); } } }结果测试

c语言让一列数字相加怎么写,c语言怎么算三个数相加(2)

c语言让一列数字相加怎么写,c语言怎么算三个数相加(3)

总结

总的来说,这道题目的难度还是比较大的,需要考虑到的点是,进位的问题,满足大于等于10的时候,就需要进行进位,那么我们思考解决这道题目的办法就是个位数分别相加、十位数分别相加、百位数分别相加等等,再来解决这个问题。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.