PAT-基础编程题-5-38 数列求和-加强版
来源:互联网 发布:淘宝代销怎么设置运费 编辑:程序博客网 时间:2024/05/22 12:35
5-38 数列求和-加强版 (20分)
给定某数字AAA(1≤A≤91\le A\le 91≤A≤9)以及非负整数NNN(0≤N≤1000000\le N\le 1000000≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯AS = A + AA + AAA + \cdots + AA\cdots AS=A+AA+AAA+⋯+AA⋯A(NNN个AAA)。例如A=1A=1A=1,N=3N=3N=3时,S=1+11+111=123S = 1 + 11 + 111 = 123S=1+11+111=123。
输入格式:
输入数字AAA与非负整数NNN。
输出格式:
输出其NNN项数列之和SSS的值。
输入样例:
1 3
输出样例:
123
解答程序:
方法一:(原创)
#include<stdio.h>
#define fun x*Aint main(void)
{
int i,x,N,b,A,j;
scanf("%d %d",&A,&N);//N代表多少个数字,A代表数字;
int num[1000001]={0}; //不要问我为什么不用可变数组:int num[N+1],也不要问我为什么要用100万的数组;
//不用可变数组的原因是:在线测试的编译器跟我使用DEV C++不同,无法编译;100万的数组是因为,没有这么长会一直显示段错误;
int flag; //只是为了方便显示 x*A,
i=0;
if(N==0) {
printf("0\n");
return 0;
}
for(x=N;x>=1;x--) {
b=i;
flag=fun;
while(flag!=0) {
num[i]=flag%10+num[i]; //加上后面数字的进位值,num[i]开始初始化为0
if(num[i]>=10) { // 判断是否有进位
num[i]=num[i]%10;
num[i+1]+=1;
}
flag=flag/10;
i++; //数组下标值加1;
if(flag==0) {
i=b; //b的作用是为了记录flag循环时i的值,出去的时候再返回;
}
}
i++;
}
i=1000000;
while(num[i]==0) { //如果数组过长,就要先把数组下标值移动到不为0的位置,最后输出;
i--;
}
for(j=i;j>=0;j--) {
printf("%d",num[j]);
}
printf("\n");
return 0;
}
方法二:(非原创,有改进)
<code class="hljs perl has-numbering"><span class="hljs-keyword">int</span> main() { <span class="hljs-keyword">int</span> A; <span class="hljs-keyword">int</span> N; <span class="hljs-keyword">int</span> i; <span class="hljs-keyword">int</span> j; <span class="hljs-keyword">int</span> t; <span class="hljs-keyword">int</span> flag; <span class="hljs-keyword">int</span> num[<span class="hljs-number">1000000</span>]; scanf(<span class="hljs-string">"<span class="hljs-variable">%d</span><span class="hljs-variable">%d</span>"</span>,&A,&N); <span class="hljs-keyword">if</span>(N == <span class="hljs-number">0</span>) <span class="hljs-keyword">printf</span>(<span class="hljs-string">"0\n"</span>); <span class="hljs-keyword">else</span> { flag = <span class="hljs-number">0</span>; <span class="hljs-keyword">for</span>(i=N, j=<span class="hljs-number">0</span>; i>=<span class="hljs-number">1</span>; i--, j++) { t = A<span class="hljs-variable">*i</span> + flag; //flag为进位标志 </code><pre name="code" class="prettyprint"><code class="hljs perl has-numbering"> num[j] = t % <span class="hljs-number">10</span>; //每一次只保存一位数字</code>
<code class="hljs perl has-numbering"> flag = t / <span class="hljs-number">10</span>; </code>} if(flag > 0) //在N,A都大的时候,最后一位可能会有进位,所以要注意: { num[j] = flag; j++; } for(i=j-1; i>=0; i--) {printf("%d",num[i]); } }return 0; }
1 0
- PAT-基础编程题-5-38 数列求和-加强版
- 数列求和-加强版 PAT
- 5-38 数列求和-加强版
- PTA 5-38 数列求和-加强版
- 数列求和-加强版
- 5-38 数列求和-加强版 (20分)
- 5-38 数列求和-加强版 (20分)
- 5-38 数列求和-加强版 (20分)
- 5-38 数列求和-加强版 (20分)
- 5-38 数列求和-加强版 (20分)
- 5-38 数列求和-加强版 (20分)
- pta 5-38 数列求和-加强版 (20分)
- PAT5-38 数列求和-加强版
- PTA 5-38 加强数列求和
- 5-1 数列求和-加强版
- 5-1 数列求和-加强版
- PTA 数列求和加强版
- PTA 数列求和-加强版
- Kali进行web渗透笔记(五)
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数
- VMware Tools 安装
- java并发编程(三)--线程挂起、恢复与终止的正确方法
- 表单验证<AngularJs>
- PAT-基础编程题-5-38 数列求和-加强版
- Unity之快捷键组合
- Kali进行web渗透笔记(六)
- 代码训练营—File,删除一个带内容的目录
- Kali进行web渗透笔记(七)
- Android UI(二)
- 正则表达式使用
- Chromium网页Pending Layer Tree激活为Active Layer Tree的过程分析
- 我的第一个公众号