C语言,急急急!!!!!!!!!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:48:36
输入两个16进制数,求和(包括小数)
#include "stdio.h" ;
#include "string.h";
#include"stdlib.h";
#include"math.h";
void main(){
char s1[100],s2[100],s[100];
int i,j,k,n=0;
scanf("%s",s1);
scanf("%s",s2);
if(strchr(s1,'.')==NULL) strcat(s1,".");
if(strchr(s2,'.')==NULL) strcat(s2,".");
while(strlen(strchr(s1,'.'))<strlen(strchr(s2,'.')) ) strcat(s1,"0");
while(strlen(strchr(s1,'.'))>strlen(strchr(s2,'.')) ) strcat(s2,"0");
strrev(s1);strrev(s2);
while(strlen(strchr(s1,'.'))<strlen(strchr(s2,'.')) ) strcat(s1,"0");
while(strlen(strchr(s1,'.'))>strlen(strchr(s2,'.')) ) strcat(s2,"0");
k=0;
for(i=0;i<strlen(s1);i++) if(s1[i]=='.') s[i]='.';

K是用来存放各个位上相加之和的变量
k=0;
for(i=0;i<strlen(s1);i++) if(s1[i]=='.') s[i]='.';
循环 小数点直接输入
else{
if(s1[i]>='A') k=k+s1[i]-'A'+10; else k=k+s1[i]-'0';
如果第I位大于A 转化成十进制数 ELSE 直接相加
if(s2[i]>='A') k=k+s2[i]-'A'+10; else k=k+s2[i]-'0';
第一个数和第二个数相加 ,如果大于A转化成十进制相加
if(k%16>=10) s[i]=k%16+'A'-10; else s[i]=k%16+'0';
K对16取余得第I位的相加结果 并转化成十六进制
k=k/16;
得到I+1位K的初始值,也就是取得进位的数
};
if(k>=10) s[i]=k+'A'-10; else s[i]=k+'0';
s[i+1]='\0';
strrev(s);
printf("%s",s);
};

整体思路就是两个数对应各位相加,K起的作用就是临时存放相加结果并保存进位值,中间有个10--16进制转化和小数点的处理的问题。自己分析一下吧
不知道你能不能看明白 呵呵