要求:
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;
}
两种方法给题主做个参考吧,本质上没有区别,只是随时计算an还是先都算出来等着调用。
备注:因为我自己这里是C++,所以请使用时将scanf_s换成scanf,并且引用stdio等库。代码和测试情况请见图。
1、因为n不超过100,所以可以先把这个数列的前100项都算出来存着,需要哪个打印哪个
2、通过函数递归随时计算an,也就是打印的时候,先计算再显示
这里提醒题主一下,因为求解到后面是非常大的数,题主要求的每项6列可能并不能显示的下。