一
设计一个函数int digit(long n,int k),它返回整数n从右边开始第k个数字的值,若不存在第k个数字则返回-1。例如digit(123456,2)=5 digit(3456,6)=-1 //位数不够,返回-1
#include<iostream> using namespace std; int digit(long n,int k) { long temp=n;int len=0; while(temp) { temp/=10; len++; } temp=n; if(k<0) return -1; if(k>len) return -1; int a=0; while(k) { a=temp%10; temp/=10; k--; } return a; } int main() { long n;int k; cin>>n>>k; cout<<digit(n,k); return 0; }
二
写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用两个函数,并输出结果,两个整数由键盘输入。
#include<iostream> using namespace std; int gcd(int a,int b) { int k=0; if(a<b) { k=b; b=a; a=k; } k=0; while(a%b!=0) { k=a%b; a=b; b=k; } return b; } int main() { int a,b,k=0; cin>>a>>b; k=gcd(a,b); cout<<k<<' '<<a/k*b; return 0; }
求最大公约数用辗转相除法,大数除以小数取余数继续除下去
最小公倍数等于两数相乘除以最大公约数
三
进制转换
#include<iostream> using namespace std; int toocr(int n) { int temp,outcome=0,i=1; while(n) { temp=n%8; outcome+=temp*i; i*=10; n/=8; } return outcome; } int main() { int n; cin>>n; cout<<toocr(n); return 0; }
10转8
#include<iostream> using namespace std; int toocr(int n) { int temp,outcome=0,i=1; while(n) { temp=n%2; outcome+=temp*i; i*=10; n/=2; } return outcome; } int main() { int n; cin>>n; cout<<toocr(n); return 0; }
10转2
#include<iostream> #include<string> using namespace std; int main() { int n, temp; string s = " "; cin >> n; if (n == 0)cout << 0; while (n) { temp = n % 16; n /= 16; if (temp < 10) s = char('0' + temp) + s; else s = char('A' + temp - 10) + s; } cout << s; return 0; }
10转16
四
求400之内的亲密对数。所谓“亲密对数”,即A的所有因子(包含1但不包含其本身)之和等于B,而B的所有因子之和等于A。
如220和284。220的因子是1、2、4、5、10、11、20,、22、44、55、110,它们之和为284,而284的因子是1、2、4、71、142,它们之和为220,所以220与284为一对亲密对数
#include<iostream> using namespace std; int sum(int n) { int sum=0; for(int i=1;i<n;i++) { if(n%i==0) sum+=i; } return sum; } int main() { int i,k; for(i=1;i<=400;i++) { k=sum(i); if(sum(k)==i&&i<k) cout<<i<<' '<<k<<endl; } return 0; }
五
任意输入10个正整数,求出其中互不相同的数的个数num,以及此num个数中哪一个数的出现次数最多,共出现了几次。
例如,当输入的10个数为:3、2、4、1、3、2、3、5、3、8,则其中互不相同的数的个数num=6,而3出现次数最多,共出现了4次。
#include<iostream> using namespace std; int main() { int s[10], p[10][2] = { 0 }; int num = 0, maxnum = 0, max = 0; int j, i; for (i = 0; i < 10; i++) { cin >> s[i]; for (j = 0; j < i; j++) { if (p[j][0] == s[i]) { p[j][1]++; break; } } if (j >= i) { p[j][0] = s[i]; num++; p[j][1]++; } } for (j = 0; j < 10; j++) { if (p[j][1] > maxnum) { maxnum = p[j][i]; max = p[j][0]; } } cout << num << ' ' << max << ' ' << maxnum; return 0; }