2130 - [数值问题]高精度比较


<br />

<span>高精度比较(bigpas/c/cpp)&nbsp;</span> 

<span>【问题描述】&nbsp;</span> 

<span>输入两个高精度正整数a和b(a,b的位数&lt;=200),比较这两个数的的大小</span> 

【输入格式】

<br />

<span><span style="font-size:14px;line-height:28px;">输入共两行,分别为a和b</span></span> 

<span><span style="font-size:14px;line-height:28px;">【输出格式】</span></span> 

<span><span style="font-size:14px;line-height:28px;">输出共一行,一个数</span></span> 

<span><span style="font-size:14px;line-height:28px;">若a&gt;=b 则输出结果1</span></span> 

<span><span style="font-size:14px;line-height:28px;">若a&lt;b &nbsp;则输出结果2</span></span> 

<span style="font-family:'Microsoft Yahei';font-size:14px;line-height:28px;background-color:#F5F5F5;">【输入样例1】&nbsp;</span><br />

1234567890000

<span><span style="font-size:14px;line-height:28px;"><span style="font-family:'Microsoft Yahei';font-size:14px;line-height:28px;background-color:#F5F5F5;">1234567890001</span><br />

<span>【输出样例1】</span> 

2

<br />

题目输入

题目输出

输入/输出样例

题目输入


                

题目输出


                

提示

Const
    SIZE = 200;

Type
    hugeint = Record
        len : Integer;
        num : Array[1..SIZE] Of Integer;
    End;
var a,b:hugeint;
    s1,s2:string;
    i:integer;
Function over(a, b : hugeint) : integer;
    Var
        i : Integer;
    Begin
        If (a.len>b.len) Then
            Begin
                over :=1 ;
                Exit;
            End;
        If a.len < b.len Then
            Begin
                over := 2;
                Exit;
            End;
        For i := a.len DownTo 1 Do
            Begin
                If a.num[i] > b.num[i] Then
                    Begin
                        over := 1;
                        Exit;
                    End;
                If a.num[i] < b.num[i] Then
                    Begin
                        over := 2;
                        Exit;
                    End;
            End;
        over := 1;
    End;
   procedure datain;
   begin
    assign(input,'big.in');  assign(output,'big.out');
    reset(input); rewrite(output);
    readln(s1);
    readln(s2);
    a.len:=length(s1);
    b.len:=length(s2);
    for i:=1 to a.len do  a.num[i]:=ord(s1[a.len-i+1])-ord('0');
    for i:=1 to b.len do  b.num[i]:=ord(s2[b.len-i+1])-ord('0');
   end;
   begin
    datain;
    writeln(over(a,b));
   close(input);close(output);
   end.

<br />

C++解答

#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char a1[202],b1[202];
int a[202],b[202];
int main()
{
	gets(a1);
	gets(b1);
	a[0]=strlen(a1);
	b[0]=strlen(b1);
	for(int i=1;i<=a[0];++i)
	  a[i]=a1[a[0]-i]-48;
	for(int i=1;i<=b[0];++i)
	  b[i]=b1[b[0]-i]-48;
	if(a[0]<b[0])printf("2");
	if(a[0]>b[0])printf("1");
	if(a[0]==b[0])
    {
	  for(int i=b[0];i>=1;--i)
      {
		 if(a[i]<b[i])
      {   printf("2");
          break;
	  }
	  if(a[i]>b[i])
	  {
			printf("1");
			break;
	  }
      }
    }
    system("pause");
    
    return 0;
}

提示

Const
    SIZE = 200;

Type
    hugeint = Record
        len : Integer;
        num : Array[1..SIZE] Of Integer;
    End;
var a,b:hugeint;
    s1,s2:string;
    i:integer;
Function over(a, b : hugeint) : integer;
    Var
        i : Integer;
    Begin
        If (a.len>b.len) Then
            Begin
                over :=1 ;
                Exit;
            End;
        If a.len < b.len Then
            Begin
                over := 2;
                Exit;
            End;
        For i := a.len DownTo 1 Do
            Begin
                If a.num[i] > b.num[i] Then
                    Begin
                        over := 1;
                        Exit;
                    End;
                If a.num[i] < b.num[i] Then
                    Begin
                        over := 2;
                        Exit;
                    End;
            End;
        over := 1;
    End;
   procedure datain;
   begin
    assign(input,'big.in');  assign(output,'big.out');
    reset(input); rewrite(output);
    readln(s1);
    readln(s2);
    a.len:=length(s1);
    b.len:=length(s2);
    for i:=1 to a.len do  a.num[i]:=ord(s1[a.len-i+1])-ord('0');
    for i:=1 to b.len do  b.num[i]:=ord(s2[b.len-i+1])-ord('0');
   end;
   begin
    datain;
    writeln(over(a,b));
   close(input);close(output);
   end.

<br />

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题