java写的杭电acm的1002 的题 为什么老是说错误? 帮忙啊!!!! 10

importjava.util.Scanner;publicclassMain{staticchar[]a,b;staticint[]a1,b1;staticintn;s... import java.util.Scanner;

public class Main {
static char[] a, b;
static int[] a1, b1;
static int n;
static int maxlen;
static int minlen;
static int[] sum;
static int m = 1;

public static void main(String[] args) {
Scanner scanint = new Scanner(System.in);
Scanner scanstr = new Scanner(System.in);
if (scanint.hasNextInt()) {
n = scanint.nextInt();
}
while ((n--) > 0) {
if (scanstr.hasNextLine()) {
a = scanstr.nextLine().toCharArray();
}
if (scanstr.hasNextLine()) {
b = scanstr.nextLine().toCharArray();
}
a1 = new int[a.length];
for (int i = 0; i < a.length; i++) {
a1[a.length - i - 1] = a[i] - '0';
}
b1 = new int[b.length];
for (int i = 0; i < b.length; i++) {
b1[b.length - i - 1] = b[i] - '0';
}
maxlen = a1.length > b1.length ? a1.length : b1.length;
minlen = a1.length > b1.length ? b1.length : a1.length;
sum = new int[maxlen + 1];
for (int i = 0; i < maxlen; i++) {
if (i < minlen) {
sum[i] = (a1.length > b1.length ? a1[i] : b1[i])
+ (a1.length > b1.length ? b1[i] : a1[i]) + sum[i];
if (sum[i] >= 10) {
sum[i] = sum[i] % 10;
sum[i + 1] = 1;
}
} else {
sum[i] = (a1.length > b1.length ? a1[i] : b1[i]) + sum[i];
if (sum[i] >= 10) {
sum[i] = sum[i] % 10;
sum[i + 1] = 1;
}
}
}
System.out.println("Case " + (m++) + ":");
System.out.print(new String(a) + "+" + new String(b) + "=");
for (int i = 0; i < sum.length; i++) {
if (sum[sum.length - 1] == 0 && i == 0) {
continue;
}
System.out.print(sum[sum.length - i - 1]);
}
System.out.println("\n");

}
}
}
展开
 我来答
雨季106
2011-05-31
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
本来想帮你解答下这道题的。但看到你对一楼那位仁兄的回复,我沉默了十秒钟。。。何谓“我知道,这样太简单了”,写程序能用这样的思想去解决问题??写代码,目的就是为了解决问题。首先要能解决问题。解决了还没完、接下来还要考虑你旅唤解决时所用的方法是否有效率,会不会太复杂。。。有没有更好的思路。。。
就hdu 1002这题,这题主要是算两数之和。而且是可能两个超过long型的数据。想必楼主应该清楚,32(在Int范围内)可以用int贮值。"程序设计"(字符串)可以用String来贮值。但如果是计算一百万亿的一亿次方。这个结果要用什么来贮值呢?用long类型??long最多也只能接收2的64次方减一。所以接收超过long类型的值就要用到java提供的BigInteger或BigDecimal这两个高精度类。前者是整型的。后者是浮点的。hdu1002这道题如果没记错应该是要你用整型的。所以可以用BigInteger贮值。
如果知道了如何接收超过long型的数据,那这题跟求一加一有分别吗??
一楼那位仁兄的解法差不多就是这样解下来的。但却换来的。楼主所谓的“我知道。这样太简单了”?那我问楼主。求1+1要多复杂??
hdu acm1002这道主要就是注意要用处理接收超过long型的数据。其他的并没什么。
接下来,说说楼主你的解法。。
我想问楼主,如果我想你帮我求下10+10的值。你是怎么解的???如果是我是这样解的。请看
:
public class Test {
public static void main(String[] args){
int a=10;
int b=10;
System.out.println(a+b);
}

}
如果按照楼主你解1002这题的解法。你难道要分别用字符串,接收两个10.再把字符串转成一个字符数组。再把字符数组里的数通过减'0'弄成Int类型????
再问楼主。如果现在要计算两个数的和(这两个数是未知的。由用户输入决定。假设这两个数为Int型),那楼主又是如何做?
如果是我,我会这样拆正凯:

import java.util.Scanner;
public class Test2 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(a+b);
}

}
这里提一点。使用Scanner类用来处理用户输入的数据只要创建一个对像就够了,比如上面我创了一个叫sc的Scanner类对象。接下来你要接收用户输进来的int类型数据。你就用int a=sc.nextInt();接收double 型的就你用double b=sc.nextDouble();接收字符串的你就用iString c=sc.next();接收一行字符串的你就用String d=sc.nextLine();用不着像楼主那样接收一个就创一个Scanner类对象

那现在计算两个超过long型的数据的和。要怎么做?
我会用类似一楼的方法:

package Test1;
import java.util.Scanner;
import java.math.BigInteger;;
public class Test2 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
BigInteger a=sc.nextBigInteger();
BigInteger b=sc.nextBigInteger();
//BigInteger类型的数据相加要用add方法。不用直接用+号
System.out.println(a.add(b));
}

}

好了。说了这么说,希望楼主能理解一点。至于1002这题的代码。你还是自己先试做下。真的弄不懂了清御。你在M我。我再把代码发给你。现在发感觉对楼主帮助不大。解题在不于能不能解对。重要的是你要学会理解,懂得运用相关知识。懂得思考。好了就这么多了。希望楼主能耐心学好java~~~
qipbiou
2011-05-24 · TA获得超过2638个赞
知道小有建树答主
回答量:959
采纳率:0%
帮助的人:568万
展开全部
两个问题,一个是scanf函数后面要加!=EOF,否则程序无拆敏带法退出,会造成OLE(Output Limit Exceeded),第二,每行的两个数字之间有个空格,而最后一个数字后面没有空格直接回车。而你的程序则在最后一个数字后面加了个空格才回车的。虽然视觉上看起来一样,但是这会造成PE(Presentation Error)。
解决方案:
第一个问题如上,第二个问题判断是否是最后一个数字拿缓。
程序:
Problem : 2032 ( 杨辉三角 ) Judge Status : Accepted
RunId : 3259128 Language : GCC Author : ccarter
Code Render Status : Rendered By HDOJ GCC Code Render Version 0.01 Beta
#include<stdio.h>
main()
{ int a[30][30];
int i,j;
int N;
while(scanf("%d",&N)!=EOF)
{
for(i=0;i<N;i++)
{ a[i][0]=1;
j=i;
a[i][j]=1;
}
for(i=2;i<=N-1;i++)
{ for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<N;i++)
{ for(j=0;j<=i;j++)
if (i!=j)
printf("%d ",a[i][j]);
else printf("%d"旅芦,a[i][j]);
printf("\n");
}
printf("\n");
}
}
追问
没有说Presentation Error
直接就wrong answer
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhr290304104
2011-05-21 · TA获得超过262个赞
知道小有建树答主
回答量:236
采纳率:0%
帮助的人:296万
展开全部
用BigDecimal类
import java.math.BigDecimal;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {

int t,i;
String num1,num2;
BigDecimal big1,big2;
Scanner in = new Scanner(System.in);
t = in.nextInt();
for(i=0;i<t;i++)
{
num1 = in.next();
num2 = in.next();
big1 = new BigDecimal(num1);
big2 = new BigDecimal(num2);
System.out.println("Case " + (i+1) + ":");
System.out.println(big1 + " + " + big2 + " = " + big1.add(big2));
if(i!=t-1)
System.out.println();
}
}
}
追问
这个我知道。
这样太简单了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gdoaoes
2011-05-26 · TA获得超过550个赞
知道答主
回答量:610
采纳率:100%
帮助的人:0
展开全部
答案超槐槐出int,轿消应用long long 下铅帆友面是我帮你改的:
#include<iostream>
using namespace std;
long long f(long long n);
int main()
{
int n;
while(cin>>n)
if(n<=1||n>20)
break;
else
cout<<f(n)<<endl;
return 1;
}
long long f(long long n)
{
long long x;
if(n==2)
x=1;
else if(n==3)
x=2;
else
x=(n-1)*(f(n-1)+f(n-2));
return x;
}
这个就可以AC的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d44faec
2011-05-21 · TA获得超过640个赞
知道小有建树答主
回答量:699
采纳率:0%
帮助的人:180万
展开全部
你的程序我运行没问题的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式