C语言_求s=a+aa+aaa+aaaa+aa...a(n个),其中a是一个数字。(当n很大时)

这个题目令我印象深刻,初见的时候用的int,老师给出的测试数据是非常非常大的数位(手下留情啊~),直接堵死了方法一

方法二的做法是把22222+2222+222.......看成一个个单独的数位上的数字,当输入的n为5时,最后一位是5个2相加,前一位是4个........定义进位和取余的函数,便于操作。

#include <math.h>
#include <stdio.h>



/*int main() {                                 //方法1  用longlong尽可能提供多的位数,最普通的直接加减,输入的数字过大则无法计算
	long long a = 0, b = 2, c, d, e, n;
	scanf("%lld", &n);
	for (; n > 0; n--) {
		a += b;
		b *= 10;
		b = b + 2;

	}
	printf("%lld", a);




}

*/
int jinwei(int
           n) {                //方法2  定义一个一维数组,储存各个位数的值,用进位和取余,随便输入都能计算,不考虑溢出
	int a, i = 0;
	a = n ;
	if (a > 9) {
		a /= 10;
		return a;

	} else
		return 0;
}

int quyu(int n) {
	int a, i = 0;
	a = n;

	return a %= 10;

}

int main() {
	int  b = 2, c, d, e, n;               //这里讨论的是2222这种形式,所以设了个b=2,可以改成scanf输入
	scanf("%d", &n);
	int a[101] = {0}, g[101] = {0};
	for (c = n; c > 0; c--) {
		a[c + 100 - n] = 2 * c;

	}


	for (d = 100; d > 0; d--) {
		g[d] = quyu(a[d]);



	}
	for (d = 100; d > 0; d--) {
		g[d - 1] += jinwei(a[d]);
		a[d - 1] += jinwei(a[d]);


	}
	for (d = 0; d <= 100; d++) {
		if (g[d] != 0) {
			while (d <= 100) {
				printf("%d", g[d++]);
			}
		}

	}








}

这种计算方式真是让人梦回小学。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值