数字间的转换(进制转换、小数化分数)

    xiaoxiao2024-10-16  0

    a进制转十进制

    const int p=16;//p代表 a进制 string s; int a() { int n=0,fal=1; for(int i=0;i<s.size();i++) { if(s[i]=='-') fal=-1; else if(s[i]>'9') n=n*p+s[i]-55;//字母大写 -55 else n=n*p+s[i]-'0'; } return n*fal; }

    十进制转b进制

    const int p=16;//p代表 b进制 stack<int> s; void swit(int n) { int tmp; if(n==0) s.push(0); while (n!=0) { tmp=n%p; n=n/p; s.push(tmp); } while(!s.empty()) { if(s.top()>=10) cout<<(char)(s.top()+55); else cout<<s.top(); s.pop(); } }

    任意进制转换

    传送门:http://poj.org/problem?id=1220

    #include <stdio.h> #include <string.h> #include<iostream> using namespace std; const int N = 10000+7; int a[N], b[N]; char olddata[N],newdata[N]; // 转换前、后的数据 void swit(int olds,int news)// 转换前、后的进制 { int i,len,k=0,flag=0; len=strlen(olddata); for(i=len-1;i>=0;i--) { if(olddata[i]=='-') {flag=1;a[len-1]=0;continue;}//解决负号问题 a[len-1-i]=olddata[i]-(olddata[i]<58?48:olddata[i]<97?55:61);//0 48 A 65 a 97 } while(len) { for(i=len;i>=1;i--) a[i-1]+=a[i]%news*olds,a[i]/= news; b[k++] =a[0]%news; a[0]/= news; while(len>0&&!a[len-1]) len--; } if(flag==1) b[k++]=-3;//解决负号问题 newdata[k]=NULL; for(i=0;i<k;i++) newdata[k-1-i]=b[i]+(b[i]<10?48:b[i]<36?55:61); } int main() { int t,x,y; scanf("%d",&t); while(t--) { scanf("%d %d %s",&x,&y,&olddata); swit(x,y); printf("%d %s\n%d %s\n\n",x,olddata,y,newdata); } return 0; }

    小数化分数

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1717

    #include <stdio.h> #include <string.h> int gcd(int m,int n){ return n==0?m:gcd(n,m%n); } int main(){ char str[20];//输入的数据 char str_temp[20];//临时变量 int i,gcd_value;//临时变量 int n;//样例个数 int fenzi,fenmu;//附加变量:输入数据转换成的小数 int num,num_bxh;//附加变量:str和str的不循环部分转换成的数字型 int len1,len2;//附加变量:非循环部分进位数和循环部分进位数 scanf("%d",&n); while (n--){ scanf("%s",str); len1=len2=1; for (i=2;str[i]!='('&&str[i]!='\0';i++){ len1*=10;///len1=10的 非循环部分位数 次方 str_temp[i-2]=str[i]; } str_temp[i-2]='\0'; if(strlen(str_temp)==0) num_bxh=0; else sscanf(str_temp,"%d",&num_bxh);//将非循环部分转换成数字 //若存在循环小数部分 if(str[i]=='('){ for (i++;str[i]!=')';i++){ str_temp[i-3]=str[i];//将循环部分添加到非循环部分尾部 len2 *=10; } str_temp[i-3]='\0';//替换')'为结束符 sscanf(str_temp,"%d",&num);//将全部字符串转换成数字 fenmu = len1*len2-len1;//大进位数 减 一个循环单元的小进位数 fenzi = num-num_bxh;//非循环和循环部分的整数 减去 非循环部分的整数 gcd_value=gcd(fenzi,fenmu); printf("%d/%d\n",fenzi/gcd_value,fenmu/gcd_value); } //若不存在循环小数部分 else { fenzi = num_bxh;//非循环部分整数 fenmu= len1;//分母为小数变整数需要乘以的位数 gcd_value = gcd(fenzi,fenmu); printf("%d/%d\n",fenzi/gcd_value,fenmu/gcd_value); } } }

    转载请注明原文地址: https://ju.6miu.com/read-1292681.html
    最新回复(0)