|
1813. M进制数问题
| |||||||||
| |||||||||
|
Time Limit: 1sec Memory Limit:32MB
Description
试用 C++的类来表示一般进制数。 给定 2 个n位m进制整数A和B,计算m进制数整数P = A / B (向下取整)与 Q = A % B的值。 Input
输入包含多个测试点。第一行为一个整数T,表示测试点数。 对于每个测试点第 1 行是进制 m 。第 2 行和第 3 行分别给出 m 进制整数 A 和 B。 所有 m 进制数的10进制表示均不超出int范围。
Output
对于每个测试点,第一行输出 m 进制数整数 P = A / B 的值,第二行输出 Q = A % B 的值。 Sample Input
11629FA57
Sample Output
5FF30
| ||
思路 将当位数字超过10的转换为数字-》将该m进制数转为10进制-》运算-》转换回来m进制
代码如下:(注意,size不能设得太小,之前设个size=10,结果function restriction,后来改为16(int 长度),问题解决)
// source code of submission 736612, Zhongshan
University Online Judge System002.#include<iostream> 003.#include<cstring> 004.#include<stdio.h> 005.#include<cmath> 006.#define
size 16 007.using namespace
std;008.class Step009.{
010.public:
011.int step; //进制数 012.char num[size]; //用于储存m进制数含字母表示方法 013.int Dnum; //转换为10进制之后的数据 014.Step(int m) //constructor
015. {
016. cin>>num; 017. step=m;
018. Dnum=0;
019. }
020.int mToD() //m进制转10进制 021. {
022.int i;023.int len=strlen(num);
024. for(i=0;i<len;i++)
025. {
026. if(num[i]>='0'&&num[i]<='9') 027. {
028. Dnum=Dnum+(num[i]-'0')*(int)pow((double)step,len-i-1); 029. }
030.else if(num[i]>='A'&&num[i]<='Z') 031. {
032. Dnum=Dnum+(num[i]-'A'+10)*(int)pow((double)step,len-i-1); 033. }
034. }
035.return
0;036. }
037. 038.};
039. 040.int dToM(int num,int step) //十进制转m进制,直接在函数中输出到屏幕中 041.{
042.char mNum[size];043.int i;044. for(i=0;;i++)
045. {
046. if(num<step)
047. {
048. if(num>=10)
049. {
050. mNum[i]=num-10+'A'; 051. }
052. else053. {
054. mNum[i]=num+'0';
055. }
056. i++;
057. break;
058. }
059. else060. {
061. if(num%step>=10)
062. {
063. mNum[i]=num%step+'A'-10; 064. num=num/step; 065. }
066. else067. {
068. mNum[i]=num%step+'0'; 069. num=num/step; 070. }
071. }
072. 073. }
074.for(int j=i-1;j>=0;j--)075. {
076. cout<<mNum[j]; 077. }
078. cout<<endl; 079.return
0;080.}
081. 082.int main()083.{
084.int t;085. cin>>t;
086. while(t--)
087. {
088.int step;089. cin>>step; 090. Step a(step);
091. Step b(step);
092. a.mToD();
093. b.mToD();
094.int shang,yu;095. shang=a.Dnum/b.Dnum; 096. yu=a.Dnum%b.Dnum; 097. dToM(shang,step); 098. dToM(yu,step); 099. }
100.return
0;101.} |
M进制数运算实现

被折叠的 条评论
为什么被折叠?



