输入一个十六进制数,输出相应的十进制数
代码:
#include<stdio.h>
#include<string.h>
void Base(char a[],int len)
{
int i,j, num,num1=0;
int sum = 0,d=1;
for (i = len-1; i >=0; i--)//后序遍历 从最后一个开始
{
for (j = len - 1 - i; j >0; j--)
{
d *= 16;//如果输入的是其他进制数转十进制,将这里的16改成相应的进制就可以了
}
if (i == len - 1)//最后一个数直接可以算出所对应的的十进制的值
{
if (a[i] >= '0' && a[i] <= '9')
num1 = a[i] - '0';
else if (a[i] >= 'A' && a[i] <= 'F')
num1 = a[i] - 'A' + 10;
else if(a[i] >= 'a' && a[i] <= 'f')
num1 = a[i] - 'a' + 10;
else { printf("输入错误"); break; }
sum+= num1;
}
else //其他位上的数可以根据自己所在的位置推算出自己对应的十进制数是多少
{
if (a[i] >= '0' && a[i] <= '9')
num = a[i] - '0';
else if (a[i] >= 'A' && a[i] <= 'F')
num = a[i] - 'A' + 10;
else if (a[i] >= 'a' && a[i] <= 'f')
num = a[i] - 'a' + 10;
else { printf("输入错误"); break; }
sum += d*num ;
}
d = 1;//d置为1开始下一轮运算
}
printf("%d\n",sum);
}
int main()
{
char a[10] = {""};
gets_s(a);
int n;
n = strlen(a);
Base(a,n);
return 0;
}
程序的主要思想:我的主要思想就是按照普通的十六进制转十进制方法,最后一位数乘16的0次方加上其他倒数第i位数乘以16的i次方。
程序结果:
给出年、月、日,计算该日是该年的第几天
代码:
#include<stdio.h>
int leapYear(int y)//这是一个 闰年函数,判断所输入的是否为闰年
{
if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
{
return 1;
}
else return 0;
}
int judge(int y, int m, int d)//这是一个判断函数 判断所输入的年月日是否为正确格式
{
int x = 1;
switch (m)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if (d < 1 || d>31)
{
x = 0;
}
break;
case 2:
if (leapYear(y))
{
if (d < 1 || d>29)
x = 0;
}
else
if (d < 1 || d>28)
x = 0;
break;
case 4: case 6: case 9: case 11:
if (d < 1 || d>30)
x = 0;
break;
}
if (y < 0 || m < 1 || m>12)
x = 0;
return x;
}
int main()
{
int y[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//将平年每一月有多少天放入数组中
int ye, m, d;
int sum = 0;
c: scanf("%d%d%d", &ye, &m, &d);
if (judge(ye, m, d))//判断格式正确
{
if (leapYear(ye))//是否为闰年
{
y[1] = 29; //是闰年的话讲数组中代表二月的元素置为29
printf("%d年%d月%d日\n", ye, m, d);
for (int i = 0; i < m - 1; i++)
{
sum += y[i];
}
printf("这是该年的第%d天", sum + d);
}
else
{
printf("%d年%d月%d日\n", ye, m, d);
for (int i = 0; i < m - 1; i++)
{
sum += y[i];
}
printf("这是该年的第%d天", sum + d);
}
}
else
{
printf("输入错误\n"); goto c;//如果输入格式错误,通过goto跳转到前面输入函数
}
return 0;
}
主要思想:先判断日期是否正确,比如年份要大于0,平年的2月没有29号,月份要大于0小于12;然后判断自己输入的年份是否为闰年,如果是闰年,将代表每个月的天数的数组中代表二月的y[1]置为29;然后通过for循环将输入的月数之前的每一个月的天数加起来,再加上输入的天数!