这题的难点是字符数字如何转换成整型数字,我们知道,字符 ‘2’-’0‘是它们的ASCII码值相减 也就是50-48=2,那么知道这点就好办了,代码如下:
#include<stdio.h>
#include<math.h>
//函数的实现
double sum1(int count1,char*arr)//统计有小数点前面的
{
int n = 0; int i = 0; double ret=0;
for (i = count1 - 1; i >= 0; i--)
{
ret+=(double)((double)arr[i] - (double)'0')* pow(10, n);
n++;
}
return ret;
}
double sum2(int count2, char* arr)//统计没有小数的
{
int n = 0; int i = 0; double ret = 0;
for (i = count2 - 1;i>=0; i--)
{
ret += (double)((double)arr[i] - (double)'0') * pow(10, n);
n++;
}
return ret;
}
double sum3(int count2, char* arr)//统计小数点后面的
{
int n = -1; int i = 0; double ret = 0;
for (i = count2 + 1; arr[i]!='\0'; i++)
{
ret += (double)((double)arr[i] - (double)'0') * pow(10, n);
n--;
}
return ret;
}
double into(char* arr)
{
//计算元素个数
char* p1 = arr; //记录小数点
char* p2 = arr;//记录\0
int count1 = 0;// 字符'.'之前的元素个数
int count2 = 0;//\0之前的元素个数
while (*p1!='.') //*p1已经等于字符‘.’
{
count1++;
p1++;
}
while (*p2 != '\0') //*p2已经等于\0
{
count2++;
p2++;
}
int i = 0; int flag = 0;
for (i = 0; i < count2; i++)
{
if (arr[i] == '.')
{
flag = 1;//记录是否有小数点
}
}
double c = sum1(count1,arr);//统计有小数点前面的
double d = sum2(count2, arr);//统计没有小数的
double e = sum3(count1,arr);//统计小数点后面的
if (flag == 1)
{
return c + e;//如果有小数点,那就返回小数点前面的和小数点后面的相加值
}
else
return d;//没有小数点,直接统计\0之前的总值
}
//主函数
int main()
{
char arr[] = "10123";
double ret=into(arr);
printf("%lf",ret);
return 0;
}