10 solutions
-
2
不明白递归在哪里,栈应该也不需要,大概是我的方法比较傻,大佬有更巧妙的办法。贴出来看看就行了,欢迎指正。
#include<stdio.h> #include<stack> using namespace std; int n,m; int main(){ scanf("%d%d",&n,&m); stack <char> s; while(n!=0){ int h=n; n / = m ; h % = m ; s.push(h); } while(!s.empty()){ if(s.top()<=9){ printf("%d",s.top()); s.pop(); } else { char t; t='A'+s.top()-10; printf("%c",t); s.pop(); } } return 0; }
-
1
两种方法 都供上了。递归 和 用栈。
#include <iostream> #include <string> #include <stack> using namespace std; char charr[26] = { 'A','B','C','D','E','F','G','H','I','J' ,'K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' }; void jinzhuan(int X,int M) { if (X == 0) { return;// 等于 0 进行返回 } jinzhuan(X / M, M); int temp = X % M; if (temp < 10) { cout << temp; } else { cout << charr[temp - 10]; } } int main(void) { int X, M; cin >> X >> M; /*stack<int> s; while (X != 0) { s.push(X % M); X /= M; } while (!s.empty()) { int temp = s.top(); if (temp < 10) { cout << temp; } else { cout << charr[temp - 10]; } s.pop(); }*/ jinzhuan(X, M); return 0; }
-
1
用数组i来存储每次的余数,最后再遍历一次数组i若i大于等于了10再转化为相应的字母来表示
#include<bits/stdc++.h> using namespace std; int a,b,l=0; int i[100000]; char p[26]; void pp(int a){ while(a>0){ i[l++]=a%b; a-=a%b; a/=b; } } int main() { cin>>a>>b; pp(a); for(int c=l-1;c>=0;c--){ if(i[c]>=10){ char b='A'+i[c]-10; cout<<b; } else cout<<i[c]; } return 0; }
-
0
本人蒟蒻,各位大佬轻点喷
#include<bits/stdc++.h> using namespace std; stack<int> s; char arr[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; void dfs(int a,int b) { if(a>b) { int num=a%b; a=a/b; s.push(arr[num]); dfs(a,b); } else { s.push(arr[a]); } } int main() { int a,b; cin>>a>>b; dfs(a,b); while(!s.empty()) { char c; c=s.top(); cout<<c; s.pop(); } return 0; }
-
0
#include <bits/stdc++.h> using namespace std; typedef long long ll; int n,m,cnt; int a[105]; char b; int main () { cin>>n>>m; cnt=0; int k=n; while(k>0) { a[cnt]=k%m; k-=a[cnt]; k/=m; cnt++; } for(int i=cnt-1;i>=0;--i)//倒序输出 { if(a[i]>=10) { b='A'+a[i]-10; cout<<b; } else { cout<<a[i]; } } return 0; }
-
0
需要注意的一点就是要反过来输出
#include<bits/stdc++.h> typedef long long ll; using namespace std; char a[100010]; void printff(int u) { if(u>=10) printf("%c",u-10+'A'); else cout<<u; } int main() { int n,m,cnt=0; cin>>n>>m; int k=n; while(k>0) { a[cnt++]=k%m; k-=k%m; k/=m; } for(int i=cnt-1;i>=0;i--) { printff(a[i]); } return 0; }
-
0
这道题的关键在于,将待转换数不断向所求进制取余,直到待转换数为0;再将余数与9比较,比9大的从‘A’开始加,比9小的直接输出
#include<stdio.h> #include<stack> #include <vector> #include<iostream> #include<string.h> using namespace std; int main() { int n,m; scanf("%d %d",&n,&m); stack<int> v; while(n!=0){ v.push(n%m); n/=m; } while(v.size()!=0){ if(v.top()<=9){ printf("%d",v.top()); v.pop(); } else{ char s='A'+v.top()-10; printf("%c",s); v.pop(); } } return 0; }
-
0
主要思想是递归进位入栈
#include<bits/stdc++.h> using namespace std; int n,m,ans[105]; stack<char> num;//开全局 char cnt[45]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//记录36个字符 void turn(int x,int y)//递归进位入栈 { int u=x/y; if(u>=y){//判断是否大于y turn(u,y); num.push(u%y);//余数在递归出来之后入栈 } else if(u<y&&u>0) num.push(u); else return; } int main() { std::ios::sync_with_stdio(false); cin>>n>>m; if(n==0)//先判断n cout<<n; else{ turn(n,m); if(n%m!=0)//递归结束后将最外面的那个余数入栈 num.push(n%m); int j=num.size(); for(int i=j;i>=1;i--){//出栈入数组 ans[i]=num.top(); num.pop(); } for(int i=1;i<=j;i++)//输出 cout<<cnt[ans[i]];//是哪个数字就输出相应的字符 } return 0; }
-
0
#include<bits/stdc++.h> using namespace std; char b[100000]; int num=0; char a[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int ss(int n,int k){ if(n==0){//判断结束条件 return 0; } else{ if(n%k>9){//正向存入 b[num]=n%k-10+'A';//注意-10和+'A' } else{ b[num]=n%k+'0';//注意+'0'否则输出会有方框 } num++; return ss(n/k,k); } } int main(){ int n; int k; cin>>n>>k; ss(n,k); for(int i=num-1;i>=0;i--){//反向输出 cout<<b[i]; } return 0; }
-
0
我这里转进制就是先不断取余,当小于要转的进制数时,再进行回溯输出即可
写得一般,仅供参考
#include <bits/stdc++.h> using namespace std; int n,m; void ff(int x){//这样输出更方便 if(x>9) printf("%c",x-10+'A'); else printf("%d",x); } void dfs(int now){ if(now<m){//小于要转的进制数则直接输出 ff(now); return ;//递归结束,开始回溯 } int k=now%m;//先取余再递归,再输出,从而保证输出是从递归结束时开始进行输出,从而倒着输出 dfs(now/m);//递归 ff(k);//输出 } int main(){ cin>>n>>m; dfs(n); return 0; }
- 1
Information
- ID
- 288
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 4
- Tags
- # Submissions
- 121
- Accepted
- 55
- Uploaded By