作者:小代码
题目:
-
题目描述:
-
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
-
输入:
-
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
-
输出:
-
请计算A+B的结果,并以正常形式输出,每组数据占一行。
-
样例输入:
-
-234,567,890 123,456,789 1,234 2,345,678
-
样例输出:
-
-111111101 2346912
C语言通过版:
流程图:
主函数:
toNum()函数:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main( void )
{
int MyPow( int x );//返回10的x次方的值
void toNum( int *num, char *IN );//把接收的字符串转换为数字
char *A = (char*)malloc(sizeof(char)*15);//保存每一组输入的第一个数字
char *B = (char*)malloc(sizeof(char)*15);//保存每一组输入的第二个数字
int aOut;//保存转换后的第一个数字
int bOut;//保存转换厚的第二个数字
int *a;
int *b;
a = &aOut;
b = &bOut;
while( EOF != scanf("%s%s",A,B) )
{
toNum( a, A );//转换第一个数字
toNum( b, B );//转换第二个数字
printf("%d\n",aOut+bOut);//输出和
}
return 0;
}
//返回10的x次方的值
int MyPow( int x )
{
if( 0 == x )
{
return 1;
}
else
{
double y = (double)x;
return (int)pow( 10, y );
}
}
//把接收的字符串转换为数字
void toNum( int *num, char *IN )
{
int blog = 1;//控制转换后整数的符号,默认为正
int i;
int mi = 0;//转换为整数时的指数
int di;//转换为整数时的底数
int len = strlen( IN );//保存字符串长度
*num = 0;//初始化整数
if( '-' == *( IN + 0 ))//如果第一个字符是‘-’,则改为负
{
blog = -1;
}
for( i = len; i >= 0; i-- )//如果字符的ASCII码是48到57之间,则转换
{
if( 48 <= *( IN + i ) && *( IN + i ) <= 57 )
{
di = *( IN + i ) - 48;
*num = *num + di * MyPow( mi );
//printf("\nnum = %d\n",*num);
mi++;
}
}
*num = (*num) * blog;//还原符号
}
JAVA未通过版:
话说这个程序比C要简洁多了,但是OJ提示 runtimer error,只好放弃这种方法了。不过我还是要保存下来,毕竟刷OJ不是目的
import java.util.*;
public class Main
{
public static void main( String[] args)
{
Scanner cin = new Scanner(System.in);
String A;//保存第一个字符串
String B;//保存第二个字符串
int a;//保存第一个整数
int b;//保存第二个整数
while( cin.hasNext() )
{
A = cin.next();//接收
B = cin.next();//接收
a = Integer.parseInt( A );//转换
b = Integer.parseInt( B );//转换
System.out.println( a + b );//输出
}
}
}
JAVA通过版(这个实在没什么意思):
import java.util.*;
import java.lang.*;
public class Main
{
public static void main( String[] args)
{
Scanner cin = new Scanner(System.in);
String A;//保存第一个字符串
String B;//保存第二个字符串
int a = -1;//保存第一个整数
int b = -1;//保存第二个整数
while( cin.hasNext() )
{
A = cin.next();//接收
B = cin.next();//接收
a = zhuan( A );
b = zhuan( B );
System.out.println( a + b );
}
}
public static int zhuan( String A )
{
int len = A.length();//保存字符串长度
int i;
int k = 0;//转换指数控制
int di;//转换底数控制
int num = 0;//保存值
int blog = 1;//保存符号
if( 45 == A.charAt( 0 ) )
{
blog = -1;
}
for( i = len - 1; i >= 0; i-- )
{
if( 48 <= A.charAt(i) && A.charAt(i) <= 57 )
{
di = A.charAt(i) - 48;
num = (int)( num + di * Math.pow(10.0,k));
k++;
}
}
num = num * blog;//回复符号
return num;
}
}