游客 Signup | Login
中文 | En

2135 - [数值问题]高精度除以低精度

高精度除以低精度(lowdiv/c/cpp) 

【问题描述】 

输入两个高精度正整数a和b(a位数<=200,b的位数<=9位),求a除以b的商的整数部分。

【输入格式】lowdiv.in

<span>输入共两行,分别为a和b。(输入数据保证a大于b)</span> 

<span>【输出格式】lowdiv.out</span> 

<span>输出共一行,表示<span style="font-family:'Microsoft Yahei';font-size:14px;line-height:21px;background-color:#F5F5F5;">a除以b的商的整数部分</span>。</span> 

<span>【输入样例1】&nbsp;</span><span><br />

9999999999999999999999999999999999123456789123456789
3333

<span style="line-height:21px;"></span> 

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

37040740811118

<br />

<br />

Input

Output

Examples

Input


                

Output


                

Hint

Const
    Size = 200;
Type
    hugeint = Record
        len : Integer;
        num : Array[1..Size] Of longint;
    End;
var a:hugeint;
    s1:string;
    i:integer;
    x:longint;

procedure lowdiv(a:hugeint;x:longint);
  var
    i:longint;
    temp:int64;
    ans:hugeint;
  begin
    fillchar(ans.num,sizeof(ans.num),0);
    ans.len:=a.len;
    temp:=0;
    for i:=a.len downto 1 do
      begin
        temp:=temp*10+a.num[i];
        ans.num[i]:=temp div x;
        temp:=temp mod x;
      end;
    while (ans.len>1)and(ans.num[ans.len]=0) do dec(ans.len);
    for i:=ans.len downto 1 do write(ans.num[i]);
    writeln;
  end;


 procedure datain;
   begin
    assign(input,'lowdiv.in');  assign(output,'lowdiv.out');
    reset(input); rewrite(output);
    readln(s1);
    readln(x);
    a.len:=length(s1);
    for i:=1 to a.len do  a.num[i]:=ord(s1[a.len-i+1])-ord('0');
 end;
 begin
   datain;
   lowdiv(a,x);
   close(input);close(output);
 end.

<br />

Solution C++

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
int main()
{
	char a1[300];
	int a[300],c[300];
	long long b;
	gets(a1);
	scanf("%lld",&b);
	int lena=strlen(a1);
	for(int i=0;i<=lena-1;++i)
	{
		a[i+1]=a1[i]-'0';
	}
	int x=0;
	for(int i=1;i<=lena;++i)
	{
		c[i]=(x*10+a[i])/b;
		x=(x*10+a[i])%b;
	}
	int lenc=1;
	while(c[lenc]==0&&lenc<lena)
	{
		lenc++;
	}
	for(int i=lenc;i<=lena;++i)
	{
		cout<<c[i];
	}
	return 0;
	
}

Hint

Const
    Size = 200;
Type
    hugeint = Record
        len : Integer;
        num : Array[1..Size] Of longint;
    End;
var a:hugeint;
    s1:string;
    i:integer;
    x:longint;

procedure lowdiv(a:hugeint;x:longint);
  var
    i:longint;
    temp:int64;
    ans:hugeint;
  begin
    fillchar(ans.num,sizeof(ans.num),0);
    ans.len:=a.len;
    temp:=0;
    for i:=a.len downto 1 do
      begin
        temp:=temp*10+a.num[i];
        ans.num[i]:=temp div x;
        temp:=temp mod x;
      end;
    while (ans.len>1)and(ans.num[ans.len]=0) do dec(ans.len);
    for i:=ans.len downto 1 do write(ans.num[i]);
    writeln;
  end;


 procedure datain;
   begin
    assign(input,'lowdiv.in');  assign(output,'lowdiv.out');
    reset(input); rewrite(output);
    readln(s1);
    readln(x);
    a.len:=length(s1);
    for i:=1 to a.len do  a.num[i]:=ord(s1[a.len-i+1])-ord('0');
 end;
 begin
   datain;
   lowdiv(a,x);
   close(input);close(output);
 end.

<br />

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题