现在的位置: 首页 > 综合 > 正文

九度OJ——1003

2013年10月16日 ⁄ 综合 ⁄ 共 2119字 ⁄ 字号 评论关闭

作者:小代码

题目:

题目描述:
给定两个整数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;		
	}
}

抱歉!评论已关闭.