1.问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1
n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定
1 <= n <= 1,000,000
1. #include <stdlib.h>
2. #include <stdio.h>
3. #define MOD 10007
4. #define MAXN 1000001
5. int n, i, F[MAXN];
6. int main()
7. {
8.     scanf("%d", &n);
9.     F[1] = 1;
10.     F[2] = 1;
11.     for (i = 3; i <= n; ++i)
12.         F[i] = (F[i-1] + F[i-2]) % MOD;
13.     printf("%d\n", F[n]);
14.     return 0;
15. }
2. 问题描述
  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
  第一行为一个整数n
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000
输出格式
  输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
1. #include <stdio.h>
2. #include <stdlib.h>
3. void Print(int *data,int n)
4. {
5.     int i;
6.     for(i=0;i<n;i++)
7.     {
8.         printf("%d ",data[i]);
9.     }
10.     printf("\n");
11. }
12.
13. int Split(int *data,int pre,int rear)
14. {
15.     int value=data[pre];
16.     while(pre<rear)
17.     {
18.         while(data[rear]>=value && pre<rear) rear--;
19.         data[pre]=data[rear];
20.         while(data[pre]<value && pre<rear) pre++;
21.         data[rear]=data[pre];
22.     }
23.     data[pre]=value;
24.     return pre;
25. }
26.
27. //快速排序
28. void QuickSort(int *data,int pre,int rear)
29. {
30.     if(pre<rear)
31.     {
32.         int mid=Split(data,pre,rear);
33.         QuickSort(data,pre,mid-1);
34.         QuickSort(data,mid+1,rear);
35.     }
36. }
37.
38. int main()
39. {
40.     int i;
41.     int n;
42.     int *data;
43.     scanf("%d",&n);
44.     data=(int *)malloc(sizeof(int)*n);
45.     for(i=0;i<n;i++)
46.     {
47.         scanf("%d",&data[i]);
48.     }
49.     QuickSort(data,0,n-1);
50.     Print(data,n);
51.     return 0;
52. }
3. 问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
  输入的第一行为一个正整数n 1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000
输出格式
  输出n行,每行为输入对应的八进制正整数。
注意
  输入的十六进制数不会有前导0,比如012A
  输出的八进制数也不能有前导0
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
以下是C++的代码(C的代码没写)
1. #include<iostream>
2. #include<cmath>
3. #include<cstring>
4.
5. using namespace std;
6.
7. int e[16][4];
8. int f[3];
9. int a[500000],c[500000],b[200000];
10. char s[100000];
11.
12. int main()
13. {
14.     int n;
15.     cin >> n;
16.     for (int i = 0; i <= 15; i ++)
17.     {
18.         int t = i;
19.         for (int j = 1; j <= 4; j ++)
20.         {
21.             e[i + 1][j] = t % 2;
22.             t = t / 2;
23.         }
24.     }
25.     for (int k = 1; k <= n; k ++)
26.     {
27.         for (int i = 1; i <= 400000; i ++) a[i] = 0;   
28.         cin >> s;
29.         int l = strlen(s);
30.         for (int i = 0; i < l; i ++)
31.         {
32.             int p; 
33.         if (int (s[i]) < 65) p = int(s[i]) - int('0');
34.             else p = int(s[i]) - int('A') + 10;
35.             for (int j = 1; j <= 4; j ++)
36.                a[4 * i + j] = e[p + 1][5 - j];
37.         }       
38.         l = 4 * l;
39.         for (int i = 1; i <= l; i ++)
40.             c[i] = a[i];
41.         for (int i = 1; i <= l; i ++)
42.             a[i] = c[l - i + 1];
43.         int p = (3 -(l % 3)) % 3;
44.         l = l + p;
45.         f[1] = 1; f[2] = 2; f[3] = 4;
46.         for (int i = 1; i <= l / 3; i ++)
47.         {
48.             b[i] = 0;
49.             for (int j = 1; j <= 3; j ++)
50.        b[i] = b[i] + a[3 * i - j + 1] * f[4 - j];
51.         }
52.         if (b[l / 3] == 0) l --; 
53.         for (int i = l / 3; i >= 1; i --)
54.             cout << b[i];
55.         cout << endl;
56.     }
57.     return 0;
58. }
3. 问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的1015分别用大写的英文字母ABCDEF表示。
样例输入
FFFF
样例输出
65535
1. #include<stdio.h>
2. #include<string.h> 
3. #include<math.h>
4. int main()
5.
6.  double sum=0,x;
7.  char a[8];
8.  int len,i=0;
9.  gets(a);
10.  len=strlen(a);
11.  while(len)
12.  {
13.   if(a[len-1]>='A'&&a[len-1]<='F')
14.     x=(a[len-1]-'7')*pow(16,i++);
15.   else
16.       x=(a[len-1]-'0')*pow(16,i++);
17.   sum+=x;
18.   len--;
19.  }
20.  printf("%.0lf",sum);
21.
22.  return 0;
23. 二进制转换10进制快捷方法 
24.  }
4. 问题描述
  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F16个符号,分别表示十进制数的015。十六进制的计数方法是满161,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E
  给出一个非负整数,将它表示成十六进制的形式。
输入格式
  输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
  输出这个整数的16进制表示
样例输入
30
样例输出
1E
提示:(1按除16取余倒数(也可使用格式输出)。
2)可以使用递归来处理,递归参数为要转换的数字,如果该数字大于等于16,则将递归处理该数整除16的值,然后再输出最后一位。 C/C++语言可以使用格式输出直接输出转换后的结果。
1. #include <stdio.h>
2. #include <stdlib.h>
3. char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
4.
5. //输出
6. void Print(char *num,int n)
7. {
8.     int i;
9.     for(i=n-1;i>=0;i--) printf("%c",num[i]);
10.     printf("\0");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。