在序列a1,a2,…,an中,对于i>1,ai是满足下面两个性质的最小正整数:(1) ai > ai-1;(2) ai 的各位数字的和与K×ai-1的各位数字的和相等。例如,当a1=1, k=2时,该序列的前6个元素是1,2,4,8,16,23。给定a1,k,n,计算该序列的第n项an的值。程序的输入数据从标准输入中读入,只有一行,包含3个整数a1、k、n,(0 < a1,k,n < 100000),计算结果an≤105000。计算结果an写入标准输出,占一行。例如,当输入数据为1 2 6时,输出结果为23
// ttt.cpp : Defines the entry point for the console application. // #include "iostream.h" int main(int argc, char* argv[]) { int x,a[10],k,n,i,b[10],j,s,t,t2,s2,t0; //数组a,b初始化为0 for(i=0;i<10;i++) { a[i]=0; b[i]=0; } //a[0]中保存第一个数列的值 a[0]=1; k=3; n=6;//执行n-1次循环,第一次求第二项,第n-1次求第n项 s=0; for(i=1;i<n;i++) { //把数组中保存的值转换为十进制数后存入s,这是为了方便后边的代码能进行比较和自加运算 j=0;t=1;s=0; while(a[j]!=0) { s+=a[j]*t; j++;t=t*10; } j=0;x=s;s=s*k; while(s>0) { a[j]=s%10; s=s/10;j++; } //计算k*s的各位数的和保存入s中 s=0;j=0; while(a[j]!=0) { s+=a[j]; j++; } //从s+1之后的数开始检验,该数各位数之和是否和前边的和相等 t2=x+1;j=0; while(1) { t0=t2;j=0; while(t0>0) { b[j]=t0%10; t0=t0/10;j++; } s2=0;j=0; while(b[j]!=0) { s2+=b[j]; j++; } if(s2==s) break;//如果求出的数较大,则不能把数保存在变量中用比较运算符比较,而应把数据的每一位保存到数组中,自己定义一个比较两个数组是否相等的函数 t2++;//同上,较大的数保存在数组中,应自己定义一个自己运算的函数 } j=0; while(b[j]!=0) { a[j]=b[j]; j++; } } for(i=9;i>=0;i--) cout<<a[i]; return 0; }