进制转换
题目描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
示例1:
输入:
0xA
输出:
10
代码
//十六进制转十进制
#include<stdio.h>
#include<string.h>
#include<math.h>
//函数声明
int value(char ch,int sign);
int main()
{
char str[10];
int num=0,sign=0;
while(gets(str)){
num=0,sign=0;
for(int i=strlen(str)-1;i>1;i--){
num=num+value(str[i],sign);
sign++;
}
printf("%d\n",num);
}
return 0;
}
//输入:一个字符 和他在字符串中的进位数
//返回值:这个字符在这个位置上能表示的大小
int value(char ch,int sign)
{
int number;
int ascii=(int)ch;
if(48<=ascii&&ascii<=57){
number=(ascii-48)*pow(16,sign);
}
else{
number=(ascii-55)*pow(16,sign);
}
return number;
}
注:
这个多组同时输入当时不明白是啥意思,查了查才知道。
用了:while(gets(str)){}
只要从缓冲区(有的输入函数没有缓冲区,这样的不会回显,有他自己的用处)读取到一行数据,函数gets();是会有返回值(返回字符串首地址,char*类型)的。对于bool类型来说就是:1,也就让while循环运转起来了。实现了多组输入。
看样子上一次明明随机数去重,排列那一道题也应该是这样的,失策失策。
质数因子
题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5 )
最后一个数后面也要有空格
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
示例1:
输入:
180
输出:
2 2 3 3 5
代码
//输入一个正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5 )
//后一个数后面也要有空格
#include<stdio.h>
//共同维护一个足够大的质因子数组,储存质因子,避免重复计算
long arr[10000]={2,3,5,7,11,13,17,19};
//声明
int Is_prime(long number);
long get_value(long number);
int main()
{
long number;
long flag;
scanf("%d",&number);
loop:
if(Is_prime(number)){
printf("%d ",number);
}
else{
flag=get_value(number);
printf("%d ",flag);
number=number/flag;
goto loop;
}
return 0;
}
//输入一个long类型的数
//输出他的一个小于他开根号的一个质因子
long get_value(long number)
{
//先尝试在已经维护的数组中找寻质因子
int sign=0;
for(;sign<10000;sign++){
if(arr[sign]!=0){
if(number%arr[sign]==0){
return arr[sign];
}
}
else{
break;
}
}
//在数组中不能找到这样一个质因子
//继续维护这个质因子数组
//当前sign数组下标指向的是一个为0的空位置
long prime=arr[sign-1]+2;//因为接下来的素数只能是加2中寻找
for(;prime<number/2;prime=prime+2){
//如果prime是一个素数
if(Is_prime(prime)){
arr[sign]=prime;
sign++;
if(number%prime==0){
return prime;
}
}
}
}
//输入一个long类型的数
//返回一个布尔值
//如果是1:表示是素数,如果是0表示不是素数
int Is_prime(long number)
{
for(int i=2;i<number/2;i++){
if(number%i==0){
return 0;
}
}
return 1;
}
取近似值
题目描述
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
输入描述:
输入一个正浮点数值
输出描述:
输出该数值的近似整数值
示例1:
输入:
5.5
输出:
6
代码
#include<stdio.h>
int main()
{
float in;
int out;
scanf("%f",&in);
out=in;//out本来是一个整形,in是float,默认向下取整
if((in-out)>=0.5){
printf("%d",out+1);
}
else{
printf("%d",out);
}
}
合并表记录
题目描述
数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出描述:
输出合并后的键值对(多行)
示例1:
输入:
4
0 1
0 2
1 2
3 4
输出:
0 3
1 2
3 4
代码
#include<stdio.h>
int main()
{
int arr[10000]={0};
int key,value;
int N;
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&key);
scanf("%d",&value);
arr[key]=arr[key]+value;
}
for(int i=0;i<10000;i++){
if(arr[i]!=0){
printf("%d %d\n",i,arr[i]);
}
}
return 0;
}
提取不重复的整数
题目描述
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1:
输入:
9876673
输出:
37689
代码
#include<stdio.h>
#include<string.h>
char out[20];//用来储存已经输出过的内容
//声明
int In(char ch);
int main()
{
char str[20];
gets(str);
int sign=0;
int k=0;
for(int i=strlen(str)-1;i>=0;i--){
if(sign){
if(In(str[i])){
printf("%c",str[i]);
out[k]=str[i];
k++;
}
}
else{
if(str[i]!=0){
sign=1;
printf("%c",str[i]);
out[k]=str[i];
k++;
}
}
}
}
//输入一个字符
//目的:判断该字符是否在out字符数组中
//在out数组中返回0,不在返回1
int In(char ch)
{
for(int i=0;i<strlen(out);i++){
if(out[i]==ch){
return 0;
}
}
return 1;
}
字符个数统计
题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。
示例1:
输入:
abc
输出:
3
代码
#include<stdio.h>
int main()
{
int sign[128]={0};//用来标识数组下标对应的ASCII码的字符在不在,1表示存在了
char str[1000];
fflush(stdin);
gets(str);
int num=0;
int flag;
for(int i=0;i<strlen(str);i++){
flag=(int)str[i];
if(0<flag&&flag<127){
if(!sign[flag]){
sign[flag]=1;
num++;
}
}
}
printf("%d",num);
return 0;
}
数字颠倒
题目描述
描述:
输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
输入描述:
输入一个int整数
输出描述:
将这个整数以字符串的形式逆序输出
示例1:
输入:
1516000
输出:
0006151
代码
#include<stdio.h>
int main()
{
int inteager;
scanf("%d",&inteager);
while(inteager>=10){
printf("%d",inteager%10);
inteager=inteager/10;
}
printf("%d",inteager);
return 0;
}