这个题目好像是上一年的初赛题吧?还是其他的我忘了,反正就是竞赛中出现的。我做过,过了,我就写一下解题思路吧。
首先,这个整数不超过一百位,没有一个整数类型能容纳这么大的一个数,所以,我们可以实用字符串记录,也就是string类型。
其次,一百位,也就是一百个数第一次相加最多为9*100=900,不超过整形integer的界限32767,故用string类型读入后,第一次运算即可将结果放进integer类型的变量中。
第三,整数类型要数位数挺麻烦的,所以我们可以将整数类型的结果放进string类型中再次执行第一步操作。由于无论如何都要执行一次操作,所以用repeat语句,而结束条件很明显就是只有一位数,也就是string类型的变量的长度=1。
程序实现如下:
var st:string;
a,i:integer; {定义变量,原本只有两个,由于考虑到要将各位数相加,所以要定义多一个循环变量,一般用i,j.k}
begin
readln(st); {读入要操作的数,因为位数太大,所以用字符串读入}
repeat
a:=0; {首先将储存变量a清零}
for i:=1 to length(st) do a:=a+ord(st[i])-48; {累加,因为在ascii码中,字符'0'为48,'1'为49,以此类推,直到'9'为57}
str(a,st); {将a转换成字符串类型,此时st的值将被覆盖}
until length(st)=1; {直到答案长度为一,也就是一位数,结束}
writeln(st); {输出答案}
end.