PAT練習題:D進制的A+B(C++)

題目描述

輸入兩個非負10進制整數A和B(<=230-1),輸出A+B的D (1 < D <= 10)進制數

思路:

計算一個數num中有多少個D(num/D),同時求num對D的餘數,這個餘數保存到結果中
將上次的num/D作爲下一次循環的num,然後再求num/D和num%D
直到num/D小於D,再把最後這位數加入到結果中

比如1103(10進制)轉到8進制

  1. num=1103,D=8
  2. num/D = 72 , num%D = 3(保存此項), num = 72
  3. num/D = 9 , num%D = 0(保存), num = 9
  4. num/D = 1 , num%D = 1(保存), num = 1
  5. num = 1 < D = 8 , 退出循環 ,將當前的num = 1保存到結果中
  6. 反向打印結果即爲所求: 1103
#include<iostream>
using namespace std;

int main()
{
    int num1,num2,format=0;
    cin>>num1;
    cin>>num2;
    cin>>format;

    string result="";
    int num = num1 + num2;
    int times = num;//每次除以D後的商,也是下一次的num
    int left;//餘數
    do
    {
        num = times;
        times = num / format;
        left = num % format;
        result += char(left+48);//保存結果爲char型,便於打印
    }while(times >= format);
    if(times != 0)
        result += char(times+48);
    int len = result.length();
    for(int i=len-1;i>=0;--i)//反向打印結果,即爲正確順序
        cout<<result[i];
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章