PTA1022 D进制的A+B 及 10进制转N(N>=2,N为自然数)进制方法
输入两个非负 10 进制整数 A 和 B (≤),输出 A+B 的 D (1)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
C#源码
using System;
namespace _1022 {
class Program
{
static void Main(string[] args)
{
string strIn = Console.ReadLine();
String[] strArr = strIn.Split(' ');
long intA = long.Parse(strArr[0]);
long intB = long.Parse(strArr[1]);
int intD = int.Parse(strArr[2]);
long C = intA + intB;
if (C == 0)//如果C为0,直接输出结果并退出
{
Console.WriteLine(0);
return;
}
int remainder = 0;
string strOut = string.Empty;
while ( C>intD)//此为重点,也就是将10进制转为D进制
{
remainder = (int)(C % intD);
C = C / intD;
strOut = remainder + strOut;
}
Console.WriteLine( strOut);
}
}
}
注意点:
需要关注A+B=0的情况;题中说的是非负数,很容易只关注了正数,未考虑A B都为0的情况
就是10进制转换为D进制(1,10] 方法
以示例中的10进制转8进制来说明,123+456=579,579转为8进制为1103。
其转换方法如下图,将579÷8=72……3 商为72余数为3,按下图中所示短除法的方法来表示商和余数。最后将最后一次商小于除数的商直接当余数,将所有余数倒序(红色箭头方向,由下到上)排列出来,就是8进制的数值:1103