zoukankan      html  css  js  c++  java
  • PAT (Basic Level) Practice 1017 A除以B (20分) (大数除法+大神简洁20行代码)

    1.题目

    本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

    输入格式:

    输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

    输出格式:

    在一行中依次输出 Q 和 R,中间以 1 空格分隔。

    输入样例:

    123456789050987654321 7
    

    输出样例:

    17636684150141093474 3

    2.代码

     我的

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    
    		char number[1000];
    		int number3[1000] ;
    		int number4[1000] ;
    		int i = 0;
    		int number2 = 0;
    		int temp = 0;
    		int flag = 0;
    		int flag2 = 0;
    		cin >> number>>number2;
    		for (i = 0; number[i]!=''; i++)
    		{
    			number3[i] = number[i] - '0';
    			flag++;
    		}
    		int count = 0;
    		int count2 = 0;
    		for (i = 0; i<flag; i++)
    		{
    			if (number3[count] >= number2)
    			{
    				temp = number3[count] / number2;
    				if (number3[count] != number2)
    				{
    					number4[count2] = temp; count2++;
    					number3[count] = number3[count] % number2;
    				}
    				else
    				{
    					number4[count2] = temp; count2++;
    					count++;
    					while (number3[count] == 0) {
    				
    						if (count == flag-1)
    							break;
    						count++;
    						number4[count2] = 0;
    						count2++;
    						
    					}
    
    				}
    
    			}
    			else
    			{
    				if (count == flag - 1)
    				{
    					if (number3[count - 1] >= number2)
    					{
    						number4[count2] = 0; count2++;
    					}
    					break;
    				}
    				temp = (number3[count] * 10 + number3[count + 1]) / number2;
    				number4[count2] = temp; count2++;
    				number3[count + 1] = (number3[count] * 10 + number3[count + 1]) % number2;
    				count++;
    			}
    
    		}
    		for (i = 0; i < count2; i++)
    			cout << number4[i];
    		cout << " " << number3[count];
    
    	}

    大神的(参见https://www.cnblogs.com/pgzhang/p/9501862.html

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main() {
        string s;
        int d,div,mod;
        cin >> s>>d;
        int len = s.length();
        div = (s[0] - '0') / d;
        mod = (s[0] - '0') % d;
        if ( div != 0 || len == 1) 
            cout << div;    
        for (int i = 1; i < len; i++) {
            div = (mod * 10 + (s[i] - '0')) / d;
            cout << div;
            mod = (mod * 10 + (s[i] - '0')) % d;
        }
        cout << ' ' << mod << endl;
        return 0;
    }
    
    
  • 相关阅读:
    原型污染
    C#之抛异常
    为什么['1', '7', '11'].map(parseInt) returns [1, NaN, 3]?
    Linux
    Linux
    Linux
    Linux
    Linux
    Linux
    其他
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/12788969.html
Copyright © 2011-2022 走看看