1813. M进制数问题

1813. M进制数问题
 
 
Total: 1075Accepted:326Rating:
2.6/5.0(9 votes)
012345
 
   

   
 
Time Limit: 1sec Memory Limit:32MB
Description

试用 C++的类来表示一般进制数。

给定 2 个nm进制整数AB,计算m进制数整数P = A / B (向下取整)与 Q = A % B的值。

Input

输入包含多个测试点。第一行为一个整数T,表示测试点数。

对于每个测试点第 1 行是进制 m 。第 2 行和第 3 行分别给出 m 进制整数 AB

所有 m 进制数的10进制表示均不超出int范围。

 

Output

对于每个测试点,第一行输出 m 进制数整数 P = A / B 的值,第二行输出 Q = A % B 的值。

Sample Input
Copy sample input to clipboard
11629FA57
Sample Output
5FF30
 
   
 

思路 将当位数字超过10的转换为数字-》将该m进制数转为10进制-》运算-》转换回来m进制

代码如下:(注意,size不能设得太小,之前设个size=10,结果function restriction,后来改为16(int 长度),问题解决)

 

// source code of submission 736612, Zhongshan University Online Judge System
002.#include<iostream>
003.#include<cstring>
004.#include<stdio.h>
005.#include<cmath>
006.#define size 16
007. using namespace std;
008. class Step
009.{
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. else
053. {
054. mNum[i]=num+'0';
055. }
056. i++;
057. break;
058. }
059. else
060. {
061. if(num%step>=10)
062. {
063. mNum[i]=num%step+'A'-10;
064. num=num/step;
065. }
066. else
067. {
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.}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值