1 条题解
-
0
C :
#include "string.h" #include "math.h" int main(int argc, char* argv[]) { int n,i; scanf("%d",&n); for(i=0;i<n;i++) { char a[101],b[101],*p; scanf("%s%s",a,b); int j,k,la,lb,coua,coub,s,c,ln,ca,cb; int ina[101],inb[101],sum[101]; la=strlen(a); lb=strlen(b); p=strchr(a,'.'); if (NULL==p) coua=0; else coua=la-(p-a)-1; p=strchr(b,'.'); if (NULL==p) coub=0; else coub=lb-(p-b)-1; c=coua>coub?coua:coub; ln=(la-coua)>(lb-coub)?la-coua:lb-coub; ca=0,cb=0; for(j=0;j<c;j++) { if(coua>coub) { inb[j]=0; ina[j]=a[la-j-1]-'0'; coub++; cb++; } else if(coua<coub) { ina[j]=0; inb[j]=b[lb-j-1]-'0'; coua++; ca++; } else { ina[j]=a[la-j-1+ca]-'0'; inb[j]=b[lb-j-1+cb]-'0'; } } ina[j]=-2,inb[j]=-2; for(k=j+1;k<ln+c;k++) { if(k>=la+ca) { ina[k]=0; inb[k]=b[lb-k-1+cb]-'0'; } else if(k>=lb+cb) { inb[k]=0; ina[k]=a[la-k-1+ca]-'0'; } else { ina[k]=a[la-k-1+ca]-'0'; inb[k]=b[lb-k-1+cb]-'0'; } } s=0; for(j=0;j<ln+c;j++) { if(ina[j]!=-2&&j<ln+c-1) { sum[j]=(s+ina[j]+inb[j])%10; s=(s+ina[j]+inb[j])/10; } else if(ina[j]!=-2&&j==ln+c-1) sum[j]=s+ina[j]+inb[j]; else sum[j]=-2; } for(j=0;j<c;j++) { if(sum[j]!=0) break; } for(k=ln+c-1;k>=j;k--) { if(ina[k]==-2&&j<c) printf("."); else if(ina[k]==-2&&j>=c) continue; else printf("%d",sum[k]); } printf("\n"); if(i!=n-1) gets(p); } return 0; }
C++ :
#include<iostream> #include<string> #include<algorithm> using namespace std; void add_zero(string &a, string &b) { int a_sub_len = int(a.find('.')); int b_sub_len = int(b.find('.')); int &sub_max = a_sub_len > b_sub_len ? a_sub_len : b_sub_len; string &sub_min = a_sub_len < b_sub_len ? a : b; while(int(sub_min.find('.')) != sub_max) { sub_min.insert(sub_min.begin(), '0'); } int a_len = a.length(); int b_len = b.length(); int max = a_len > b_len ? a_len : b_len; string &min = a.length() < b.length() ? a : b; while(min.length() != max) { min += '0'; } } string float_add(string &a, string &b) { add_zero(a, b); reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); int len = a.length(), carry = 0; string result; for(int i = 0; i < len; i++) { if(a[i] == '.') result += '.'; else { result += char(((a[i] + b[i] - 96) + carry) % 10 + 48); carry = (a[i] + b[i] - 96 + carry) / 10; } } if(carry > 0) { result += char(carry + 48); } while(result[0] == '0' && result[1] != '.') { result.erase(result.begin()); } while(*(result.end() - 1) == '0' && *(result.end() - 2) != '.') { result.erase(result.end() - 1); } reverse(result.begin(), result.end()); return result; } int main() { int n; string a, b; while(cin >> n) { while(n--) { cin >> a >> b; cout << float_add(a, b) << endl; } } return 0; }
Java :
import java.math.BigDecimal; import java.util.Scanner; public class Main{ private static Scanner s = new Scanner(System.in) ; public static void main(String[] args) { int n = s.nextInt() ; for (int i = 0; i < n; i++) { BigDecimal x = s.nextBigDecimal() ; BigDecimal y = s.nextBigDecimal() ; BigDecimal result = x.add(y) ; result = result.stripTrailingZeros() ; System.out.println(result); } } }
- 1
信息
- ID
- 1117
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者