1324 条题解
-
0
倾城依回释梦落红空巷琳影 LV 7 @ 2016-04-17 20:37:03
A+B问题,一道历史悠久的问题,下面就给出该题的多种解法。
解法一:首先用cin/scanf读入两个int类型数a和b,再用cout/printf输出a+b的结果。核心代码:cin>>a>>b; cout<<a+b<<endl;
解法二:为了防止计算a+b时占用过多内存(其实也没多少),可使用C++的提供的内联汇编来完成本题。核心代码:
__asm
(
"mov %1,%%eax \n\t"
"mov %2,%%ebx \n\t"
"add %%eax,%%ebx \n\t"
"mov %%ebx,%0"
:"=m"(b)
:"m"(a),"m"(b)
);
最后输出b即可。(事实上,这就是不让编译器替我们把高级语言翻译为汇编语言,直接就替它做了)解法三:为防止出题人故意出大数据恶心我们,可采用高精度加法完成此题。核心代码:
char s1[101] , s2[101] , l1 , l2 , l3;
int a[101]={0} , b[101]={0} , c[102]={0};
cin >> s1 >> s2;
l1 = strlen(s1);
l2 = strlen(s2);
for (int i = 0 ; i < l1 ; i++) a[l1 - i] = s1[i] - '0';
for (int i = 0 ; i < l2 ; i++) b[l2 - i] = s2[i] - '0';
l3 = max(l1 , l2);
for (int i = 1 ; i <= l3 ; i++)
{
c[i] += a[i] + b[i];
c[i + 1] = c[i] / 10;
c[i] %= 10;
}
if (c[l3 + 1] == 1) l3++;
for (int i = l3 ; i >= 1 ; i--) cout << c[i]; cout<<endl;解法四:(从此以后均为扯淡)
设f[i][j]表示i+j的值。可得状态转移方程为f[i][j] = max(f[i-1][j]+1 , f[i][j-1]+1)。由于任何数加0数值不变(公理),所以边界条件为f[0][i]=f[i][0]=i。最后输出f[a][b]即可。核心代码:
for (int i = 1 ; i <= a ; i++) f[i][0] = i;
for (int i = 1 ; i <= b ; i++) f[0][i] = i;
for (int i = 1 ; i <= a ; i++)
for (int j = 1 ; j <= b ; j++)
f[i][j] = max(f[i - 1][j] + 1 , f[i][j - 1] + 1);解法五:分析解法四时间复杂度知若时间为O(a*b)。若a*b过大则程序必定超时。观察代码容易发现,根据分配律(公理)得:
f[i][j-1]+1=(i)+(j-1)+1=(i)+(j)-1+1=(i-1)+(j)+1=f[i-1][j]+1
根据上式我们可以立即将时间和空间复杂度都降低一维。核心代码:
f[0] = 0;
for (int i = 1 ; i <= max(a , b) ; i++)
f[i] = f[i - 1] + 1;最后输出f[a]+f[b]。可以看到,时间复杂度为O(max(a,b)),为线性,可以通过此题。
解法六:
首先orz给出本解法的神犇
设图G=(V, E)为一流网络,包含2个源点S1、S2和1个汇点T。构造该图使得:
从S1、S2分别发出a、b条边,每条边的容量为1,这些边应当连接到max(a, b)个顶点上,且没有两条边拥有相同的两个端点。从这max(a, b)个顶点分别连一条容量为+∞的边到汇点T。然后在这个流网络上面跑Dinic算法、Ford-Fulkerson算法之类的东西,可以练练写网络流的手感。
-
02016-03-19 03:54:45@
Java作死版
```java
import java.math.BigDecimal;
import java.util.*;public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
BigDecimal a = BigDecimal.valueOf(scanner.nextLong());
BigDecimal b = BigDecimal.valueOf(scanner.nextLong());
for(;b.longValue()>0;b=b.subtract(BigDecimal.ONE)){
a = a.add(BigDecimal.ONE);
}
System.out.println(a.toString());
scanner.close();
}
}
``` -
02016-02-29 16:57:30@
var a,b:longint; begin readln(a,b); writeln(a+b); end.
-
02016-02-19 16:20:15@
import java.io.*;
import java.util.*;public class Main
{
public static void main (String args[]) throws Exception
{
BufferedReader stdin =
new BufferedReader(
new InputStreamReader(System.in));String line = stdin.readLine();
StringTokenizer st = new StringTokenizer(line);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(a+b);
}
} -
02016-02-17 23:36:14@
编译成功
测试数据 #0: WrongAnswer, time = 0 ms, mem = 504 KiB, score = 0
测试数据 #1: WrongAnswer, time = 0 ms, mem = 504 KiB, score = 0
测试数据 #2: WrongAnswer, time = 0 ms, mem = 512 KiB, score = 0
测试数据 #3: WrongAnswer, time = 0 ms, mem = 508 KiB, score = 0
测试数据 #4: WrongAnswer, time = 0 ms, mem = 508 KiB, score = 0
测试数据 #5: WrongAnswer, time = 0 ms, mem = 508 KiB, score = 0
测试数据 #6: WrongAnswer, time = 0 ms, mem = 504 KiB, score = 0
测试数据 #7: WrongAnswer, time = 0 ms, mem = 504 KiB, score = 0
测试数据 #8: WrongAnswer, time = 15 ms, mem = 504 KiB, score = 0
测试数据 #9: WrongAnswer, time = 15 ms, mem = 508 KiB, score = 0
WrongAnswer, time = 30 ms, mem = 512 KiB, score = 0
-
02016-02-17 23:31:19@
不是跟hello world一样吗,真是……
c++
#include<stdio.h>
int main(){
printf("A+B problem\n");
return 0;
}
-
02016-02-09 20:19:10@
#include<cstdio>
using namespace std;
int a, b;
int main()
{
scanf("%d%d",&a,&b);
printf("%d\n",(a+b));
return 0;
} -
02015-12-14 03:12:43@
#include<stdio.h>
int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("%d",x+y);
return 0;
} -
02015-12-11 07:56:51@
include<iostream> include<cmath> include<cstdio> include<cstring> include<algorithm>
using namespace std;
int main()
{
//freopen("p.in","r",stdin);
//freopen("p.out","w",stdout);
int a,b,st[100000],maxx=1,g;
cin>>a>>b;
for(int i=a;i>=1;i--)
{
g=1;
st[1]++;
while(st[g]>=10)
{
st[g]-=10;
g++;
st[g]+=1;
}
maxx=max(g,maxx);
}
for(int j=b;j>=1;j--)
{
g=1;
st[1]++;
while(st[g]>=10)
{
st[g]-=10;
g++;
st[g]+=1;
}
maxx=max(g,maxx);
}
for(int i=maxx;i>=1;i--)
cout<<st[i];
return 0; -
02015-12-11 07:54:48@
果断高精度。。。。。。。。。。。。。。。。。。。。。。。
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
//freopen("p.in","r",stdin);
//freopen("p.out","w",stdout);
int a,b,st[100000],maxx=1,g;
cin>>a>>b;
for(int i=a;i>=1;i--)
{
g=1;
st[1]++;
while(st[g]>=10)
{
st[g]-=10;
g++;
st[g]+=1;
}
maxx=max(g,maxx);
}
for(int j=b;j>=1;j--)
{
g=1;
st[1]++;
while(st[g]>=10)
{
st[g]-=10;
g++;
st[g]+=1;
}
maxx=max(g,maxx);
}
for(int i=maxx;i>=1;i--)
cout<<st[i];
return 0;
} -
02015-12-06 20:05:58@
integer就够了~~~~~
-
02015-11-29 16:38:18@
var a,b"inteer;
begin
readln(a,b);
writeln(a+b);
end.
我想吐 -
02015-11-29 16:36:17@
Free Pascal Compiler version 2.6.2 [2013/02/12] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling foo.pas
Linking foo.exe
5 lines compiled, 0.1 sec , 27904 bytes code, 1628 bytes data
测试数据 #0: Accepted, time = 0 ms, mem = 612 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 616 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 612 KiB, score = 10
测试数据 #3: Accepted, time = 15 ms, mem = 612 KiB, score = 10
测试数据 #4: Accepted, time = 15 ms, mem = 612 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 612 KiB, score = 10
测试数据 #6: Accepted, time = 0 ms, mem = 608 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 612 KiB, score = 10
测试数据 #8: Accepted, time = 0 ms, mem = 612 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 612 KiB, score = 10
Accepted, time = 30 ms, mem = 616 KiB, score = 100 -
02015-11-22 10:27:53@
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a1[100],b1[100];
int a[100],b[100],c[100],lena,lenb,lenc,i,x;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
gets(a1);
gets(b1);
lena=strlen(a1);
lenb=strlen(b1);
for(i=0;i<=lena-1;i++)
a[lena-i]=a1[i]-48;
for(i=0;i<=lenb-1;i++)
b[lenb-i]=b1[i]-48;
lenc=1;
x=0;
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/10;
c[lenc]%=10;
lenc++;
}
c[lenc]=x;
if(c[lenc]==0)
lenc--;
for(i=lenc;i>=1;i--)
cout<<c[i];
cout<<endl;
return 0;
} -
02015-11-11 16:20:06@
var a,b:longint;
begin
readln(a,b);
writeln(a+b);
end. -
02015-11-05 22:17:26@
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
system("pause");
return 0;
} -
02015-11-05 16:22:09@
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
} -
02015-11-04 18:40:29@
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);//system("PAUSE");
return 0;
} -
02015-10-26 16:47:49@
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);system("PAUSE");
return 0;
} -
02015-04-22 21:29:13@
var a,b:longint;
begin
readln(a,b);
writeln(a+b);
end.
信息
- ID
- 1000
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 74670
- 已通过
- 28578
- 通过率
- 38%
- 被复制
- 238