PAT 2-06. 数列求和(20)

题目意思:给定某数字A(1<=A<=9)以及非负整数N(0<=N<=100000),求数列之和S = A + AA + AAA + … + AA…A(N个A)

最开始一想还以为是大数相加,但是想了一下,感觉有规律。

解题思路:n个a相加除以10的余数为当前位的结果,商为新的进位 ,由此可以得到结果的每一位

代码如下(带注释):

#include<iostream>
using namespace std;
int a,n;
int sum[100005],k=0;//sum逆序存结果的每一位
int main()
{
	cin>>a>>n;
	if(n==0)
	{
		cout<<0<<endl;
		return 0;
	}
	int c=0;//c为进位
	for(int i=n;i>=1;i--)
	{
		c+=i*a;
		sum[k++]=c%10;//i个a相加除以10的余数为当前位的结果
		c=c/10;//商为新的进位
	}
	if(c!=0)//c为0时不输出最高进位c
	{
		cout<<c;
	}
	for(int i=k-1;i>=0;i--)//逆序输出
	{
		cout<<sum[i];
	}
	cout<<endl;
	return 0;
}

  

时间: 2024-10-15 18:03:14

PAT 2-06. 数列求和(20)的相关文章

数列求和-加强版(20 分) C

习题2.3 数列求和-加强版 (20 分) 给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+?+AA?A(N个A).例如A=1, N=3时,S=1+11+111=123. 输入格式: 输入数字A与非负整数N. 输出格式: 输出其N项数列之和S的值. 输入样例: 1 3 输出样例: 123 #include <stdio.h> typedef int ElementType; typedef int Position; typedef int C

UVa 1363 (数论 数列求和) Joseph&#39;s Problem

题意: 给出n, k,求 分析: 假设,则k mod (i+1) = k - (i+1)*p = k - i*p - p = k mod i - p 则对于某个区间,i∈[l, r],k/i的整数部分p相同,则其余数成等差数列,公差为-p 然后我想到了做莫比乌斯反演时候有个分块加速,在区间[i, n / (n / i)],n/i的整数部分相同,于是有了这份代码. 1 #include <cstdio> 2 #include <algorithm> 3 using namespace

PAT 1030. 完美数列

PAT 1030. 完美数列 给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格式: 输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数.第二行给出N个正整数,每个数不超过109. 输出格式: 在一行中输出最多可以选择多少个数可以用它们组成一个完美数列. 输入样例: 10 8 2 3

7-38 数列求和-加强版

7-38 数列求和-加强版(20 分) 给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+?+AA?A(N个A).例如A=1, N=3时,S=1+11+111=123. 输入格式: 输入数字A与非负整数N. 输出格式: 输出其N项数列之和S的值. 输入样例: 1 3 输出样例: 123 思路:直接用长整形累加代码简单,但是超范围了(:′⌒`),本来还试了下使用数组来进行发现还是没AC.然后换了种思路横着一个个加不行,那纵着加呢?(横纵参考下图)很完

PAT乙级1034. 有理数四则运算(20)

本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0. 输出格式: 分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和.差.积.商.注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分:若为负数,则须加括号:若除法分母为0,则输出“Inf”.题目保证正确的输出中没

求数列前20项之和

有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13..求出这个数列前20项之和.function text4(){ var denominator; var molecule; var i= 0,k= 1,str=""; var str1="",str2="",sum=0; for(var j=1;j<=20;j++){ //分母 denominator=i+k; i=k; k=denominator; str+=deno

2/1+3/2+5/3+8/5+13/8+…求出这个数列前20项的和

★有一个分数序列2/1+3/2+5/3+8/5+13/8+-求出这个数列前20项的和. #include<stdio.h> #include<stdlib.h> int main() { int i = 0; double x = 2.0, y = 1.0, z = 0.0; double sum = 0; for (i = 1; i <= 20; i++) { sum = sum+x / y; z = x; x = x + y; y = z; } printf("

李洪强漫谈iOS开发[C语言-051]-数列求和

// //  main.c //  53 - 数列求和 - 李洪强 // //  Created by vic fan on 16/10/15. //  Copyright ? 2016年 李洪强. All rights reserved. // #include <stdio.h> int main(int argc, const char * argv[]) { //1 ,3,5,7... //中间有多少项相加 //sum = 0 + 1; //sum = 1 + 3; //sum = 4

[华为机试练习题]51.数列求和

题目 描写叙述: 题目描写叙述 编敲代码,输入一个正整数n.求下列算式的值.要求定义和调用函数fact(k)计算k的阶乘. 1+1/2!+ .... +1/n! 计算结果保存在double类型变量中. 接口说明 原型: void GetResult(int InputNum, double *NumResult); 输入參数: Int InputNum:输入一个正整数,进行表达式计算 char *NumResult:输出表达式的值 返回值: void 练习阶段: 0基础 代码 /*-------

循环-15. 统计素数并求和(20)

1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 bool isPrime(int n){ 5 int i; 6 for(i=2;i<=sqrt(n);++i) 7 if(n%i==0) 8 break; 9 if(n>=2&&i>sqrt(n)) 10 return true; 11 else 12 return false; 13 } 14 int main(){ 1