//I tried this one but output was wrong for tenth term
import java.io.*;
public class series
{
public static void main(String args[])throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int n,i,i1=0,s=0,c=0;
System.out.println("Enter the term of the series you want to get");
n=Integer.parseInt(in.readLine());
for (i=1;i<=n;i++)
{
i1=i;
while (i1!=0)
{
c+=1;
i1=i1/10;
}
s=(int)(s*(Math.pow(10,c))+i);
c=0;
System.out.print(s+" ");
}
}
}
答案 0 :(得分:5)
我不知道您为什么使用当前的方法。我将跟踪上一期的印刷内容。
StringBuilder term = new StringBuilder("");
final int N = 20;
for (int i=1; i <= N; ++i) {
term.append(i);
if (i > 1) System.out.print(",");
System.out.print(term.toString());
}
编辑:我建议使用字符串显示每个术语的原因是,您的要求似乎主要是表示之一。也就是说,您实际上并没有对每个术语进行任何数学运算,所以为什么不完全避免数字类型,也避免了诸如溢出和精度损失之类的问题。
答案 1 :(得分:1)
虽然Tim's answer很整洁,但我认为练习非常基本,以至于StringBuilder
超出了范围(*)。
相反,您可以使用嵌套的for循环:
final int N = 20;
for (int i=1; i <= N; ++i) {
if (i > 1) System.out.print(",");
for (int a = 1; a <= i; ++a) {
System.out.print(a);
}
}
(这还将提高内存效率,因为不需要随着StringBuffer
的增加而不断重新分配i
的内部缓冲区。但这实际上是次要的(甚至更少) )关注)。
(*)是的,您可以不使用StringBuilder而执行相同的操作,只需使用String连接即可;但这对于初学者可能无法“理解”的方式将是低效的,因此最好将其引导。嵌套循环比以任何形式的字符串串联更有用,它可以帮助您解决问题。
答案 2 :(得分:0)
第十个学期后输出错误的主要原因是整数溢出。您可以花很长时间摆脱它,但可以使用某些术语,但绝对更好的解决方案是使用Strings
回答。