1017 A除以B (20 分)
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
一、C实现
#include<stdio.h>
#include<string.h>
int main()
{
char number[1001];
int shang[1001];
int amountShang=0;
int chuShu;
int sumHere=0;
int a;
scanf("%s %d",number,&chuShu);
int len = (int)strlen(number);
for(int i=0;i<len;i++){
a = number[i]-'0';
sumHere = 10*sumHere+a;
if(sumHere>=chuShu){
shang[amountShang] = sumHere/chuShu;
amountShang++;
sumHere%=chuShu;
}
else{
if(amountShang!=0) shang[amountShang++]=0;
}
}
if(amountShang==0) printf("0");
else{
for(int i=0;i<amountShang;i++) printf("%d",shang[i]);
}
printf(" %d\n",sumHere);
}
二、JAVA实现
相同方法java超时0分...
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String number = scanner.next();
int chuShu = scanner.nextInt();
String shang="";
int sign=0;//第一位非0数前的商不存
int len = number.length();
int sumNow = 0;
for(int i=0;i<len;i++){
int a = number.charAt(i)-'0';
sumNow = sumNow*10+a;
if(sumNow>=chuShu){//商这一位>1
int here = sumNow/chuShu;
if(sign==0) sign++;
shang+=here;
sumNow%=chuShu;
}
else{ //0
if(sign!=0) shang+=0;
}
}
if(shang=="") System.out.print(0);
else System.out.print(shang);
System.out.print(" "+sumNow);
}
}