一个前三项是0,0,1的数列,其后每项是前三项的和,输出前n(5~100)(含)项。C语言咋编程?

要求:
1.n由键盘输入,5<=n<=100;输入错误提示并退出程序。
2.输出按每项占6列、每行4项、行尾无空格的格式。
3.最后一行不足4项时也要回车且无空格。

此题本身有点问题:当n较大时是个二十多位的十进制数,所以“每项6列”显然是行不通的;且4字节整型和8字节整型都不能胜任了,要溢出,所以需要用“大数加法”来处理。下面提供一个用每项27列输出的代码。供参考。

代码文本:

#include "stdio.h"

int main(int argc,char *argv[]){

char a[4][26],n,i,j,k,t;

printf("Enter n(int 4<n<101)...\nn=");

if(scanf("%d",&n)==1 && n>4 && n<101){

for(i=0;i<26;a[0][i++]=a[1][i]=a[2][i]='0');

a[2][25]='1';

printf("%26d %26d %26d ",0,0,1);

for(k=3,i=3;i<n;i++){

for(j=0;j<26;a[3][j++]='0');//和数组清0

for(j=0;j<3;j++)//大数加法

for(t=25;t>=0;t--)

if((a[3][t]+=a[j][t]-'0')>'9')

a[3][t]-=10,a[3][t-1]++;

for(t=0;t<3;t++)//存储加法结果

for(j=0;j<26;a[t][j++]=a[t+1][j]);

for(j=0;a[2][j++]=='0';putchar(' '));//输出

for(j--;j<26;putchar(a[2][j++]));

putchar(' ');

if(++k%4==0)

putchar('\n');

}

if(k%4)//若最后一行不足4项则补一回车

putchar('\n');

}

else//输入错误提示并退出

printf("Input error, exit...\n");

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-30

两种方法给题主做个参考吧,本质上没有区别,只是随时计算an还是先都算出来等着调用。

备注:因为我自己这里是C++,所以请使用时将scanf_s换成scanf,并且引用stdio等库。代码和测试情况请见图。

1、因为n不超过100,所以可以先把这个数列的前100项都算出来存着,需要哪个打印哪个

2、通过函数递归随时计算an,也就是打印的时候,先计算再显示


这里提醒题主一下,因为求解到后面是非常大的数,题主要求的每项6列可能并不能显示的下。

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网