#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define N 1000
#define M 10 // 保留小数的位数
void Input(char number1[], char number2[], int n);//输入数据
void Change_str(char number[], int n);//数组前后互换
void Sub(char number1[], char number2[], char number3[]);//实现减法
int Compare(char number1[], char number2[]); //判断两个数的大小,大则返回0,小则返回1
void Clear_Zero(char number[]); //清楚最前面无用0
void Input(char number1[], char number2[], int n)//输入数据
{
scanf("%s%s", number1, number2);
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
if (length_n1 > n || length_n2 > n)
{
printf("ERROR:输入的数据超出范围!");
system("pause");
exit(1);
}
int flag = 0;
for (int i = 0; i < length_n2; i++)
{
if (number2[i] != '0')
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("ERROR:除数不能为0!");
system("pause");
exit(1);
}
}
void Change_str(char number[], int n)//数组前后互换
{
for (int i = 0; i < n / 2; i++)
{
char temp = number[i];
number[i] = number[n - i - 1];
number[n - i - 1] = temp;
}
}
void Clear_Zero(char number[])
{
int length = strlen(number);
int flag = 0;
int count = 0;
for (int i = 0; i < length; i++)
{
if (flag == 0)
{
if (number[i] == '0')
{
count++;
}
else
{
flag = 1;
}
}
}
if (count == length)
{
number[0] = '0';
number[1] = '\0';
}
else
{
for (int i = 0; i < length - count; i++)
{
number[i] = number[i + count];
}
number[length - count] = '\0';
}
}
void Sub(char number1[], char number2[], char number3[])//实现减法
{
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
Change_str(number1, length_n1);
Change_str(number2, length_n2);
int sub_number;
int one;
int ten = 0;
for (int i = 0; i < length_n2; i++)
{
if (ten == 0)
{
sub_number = (number1[i] - 48) - (number2[i] - 48);
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
}
}
else if (ten == 1)
{
sub_number = (number1[i] - 48) - (number2[i] - 48) - 1;
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
ten = 0;
}
}
}
for (int i = length_n2; i < length_n1; i++)
{
if (ten == 0)
{
number3[i] = number1[i];
}
else if (ten == 1)
{
sub_number = (number1[i] - 48) - 1;
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
ten = 0;
}
}
}
number3[length_n1] = '\0';
Change_str(number3, length_n1);
Change_str(number2, length_n2);
}
int Compare(char number1[], char number2[]) //判断两个数的大小,大则返回0,小则返回1
{
int minus;//判断符号
char number3[N];
char number4[N];
strcpy(number3, number1);
strcpy(number4, number2);
Clear_Zero(number3);
Clear_Zero(number4);
int length_n1 = strlen(number3);
int length_n2 = strlen(number4);
if (length_n1 > length_n2)
{
minus = 0;
}
else if (length_n1 < length_n2)
{
minus = 1;
}
else
{
for (int i = 0; i <length_n1; i++)
{
if (number3[i] > number4[i])
{
minus = 0;
break;
}
else if (number3[i] < number4[i])
{
minus = 1;
break;
}
else
{
minus = 0;
}
}
}
return minus;
}
void Devide(char number1[], char number2[], char number3[],char number5[])
{
char number4[N];
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
int minus = Compare(number1, number2);
if (minus == 0)
{
for (int j = 0; j < length_n2; j++)
{
number4[j] = number1[j];
}
number4[length_n2] = '\0';
int count_n4 = length_n2;
for (int i = 0; i < (length_n1 - length_n2 + 1); i++)
{
int count = 0;
while (!Compare(number4, number2))
{
Sub(number4, number2, number4);
count++;
}
number3[i] = count + 48;
number4[count_n4] = number1[count_n4];
count_n4++;
number4[count_n4] = '\0';
}
number3[length_n1 - length_n2 + 1] = '\0';
int count_n5 = strlen(number4);
for (int i = 0; i < M; i++)
{
int count = 0;
number4[count_n5] ='0';
count_n5++;
number4[count_n5] = '\0';
while (!Compare(number4, number2))
{
Sub(number4, number2, number4);
count++;
}
number5[i] = count + 48;
}
number5[M] = '\0';
}
else
{
strcpy(number4, number1);
int count_n4 = strlen(number4);
for (int i = 0; i < M; i++)
{
int count = 0;
number4[count_n4] = '0';
count_n4++;
number4[count_n4] = '\0';
while (!Compare(number4, number2))
{
Sub(number4, number2, number4);
count++;
}
number5[i] = count + 48;
}
number5[M] = '\0';
number3[0] = '0';
number3[1] = '\0';
}
}
void main()
{
char number1[N];
char number2[N];
char number3[N];
char number5[N];
Input(number1, number2, N);
Devide(number1, number2, number3,number5);
Clear_Zero(number3);
printf("%s", number3);
printf(".%s", number5);
system("pause");
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define N 1000
#define M 10 // 保留小数的位数
void Input(char number1[], char number2[], int n);//输入数据
void Change_str(char number[], int n);//数组前后互换
void Sub(char number1[], char number2[], char number3[]);//实现减法
int Compare(char number1[], char number2[]); //判断两个数的大小,大则返回0,小则返回1
void Clear_Zero(char number[]); //清楚最前面无用0
void Input(char number1[], char number2[], int n)//输入数据
{
scanf("%s%s", number1, number2);
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
if (length_n1 > n || length_n2 > n)
{
printf("ERROR:输入的数据超出范围!");
system("pause");
exit(1);
}
int flag = 0;
for (int i = 0; i < length_n2; i++)
{
if (number2[i] != '0')
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("ERROR:除数不能为0!");
system("pause");
exit(1);
}
}
void Change_str(char number[], int n)//数组前后互换
{
for (int i = 0; i < n / 2; i++)
{
char temp = number[i];
number[i] = number[n - i - 1];
number[n - i - 1] = temp;
}
}
void Clear_Zero(char number[])
{
int length = strlen(number);
int flag = 0;
int count = 0;
for (int i = 0; i < length; i++)
{
if (flag == 0)
{
if (number[i] == '0')
{
count++;
}
else
{
flag = 1;
}
}
}
if (count == length)
{
number[0] = '0';
number[1] = '\0';
}
else
{
for (int i = 0; i < length - count; i++)
{
number[i] = number[i + count];
}
number[length - count] = '\0';
}
}
void Sub(char number1[], char number2[], char number3[])//实现减法
{
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
Change_str(number1, length_n1);
Change_str(number2, length_n2);
int sub_number;
int one;
int ten = 0;
for (int i = 0; i < length_n2; i++)
{
if (ten == 0)
{
sub_number = (number1[i] - 48) - (number2[i] - 48);
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
}
}
else if (ten == 1)
{
sub_number = (number1[i] - 48) - (number2[i] - 48) - 1;
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
ten = 0;
}
}
}
for (int i = length_n2; i < length_n1; i++)
{
if (ten == 0)
{
number3[i] = number1[i];
}
else if (ten == 1)
{
sub_number = (number1[i] - 48) - 1;
if (sub_number < 0)
{
one = 10 + sub_number;
ten = 1;
number3[i] = one + 48;
}
else
{
number3[i] = sub_number + 48;
ten = 0;
}
}
}
number3[length_n1] = '\0';
Change_str(number3, length_n1);
Change_str(number2, length_n2);
}
int Compare(char number1[], char number2[]) //判断两个数的大小,大则返回0,小则返回1
{
int minus;//判断符号
char number3[N];
char number4[N];
strcpy(number3, number1);
strcpy(number4, number2);
Clear_Zero(number3);
Clear_Zero(number4);
int length_n1 = strlen(number3);
int length_n2 = strlen(number4);
if (length_n1 > length_n2)
{
minus = 0;
}
else if (length_n1 < length_n2)
{
minus = 1;
}
else
{
for (int i = 0; i <length_n1; i++)
{
if (number3[i] > number4[i])
{
minus = 0;
break;
}
else if (number3[i] < number4[i])
{
minus = 1;
break;
}
else
{
minus = 0;
}
}
}
return minus;
}
void Devide(char number1[], char number2[], char number3[],char number5[])
{
char number4[N];
int length_n1 = strlen(number1);
int length_n2 = strlen(number2);
int minus = Compare(number1, number2);
if (minus == 0)
{
for (int j = 0; j < length_n2; j++)
{
number4[j] = number1[j];
}
number4[length_n2] = '\0';
int count_n4 = length_n2;
for (int i = 0; i < (length_n1 - length_n2 + 1); i++)
{
int count = 0;
while (!Compare(number4, number2))
{
Sub(number4, number2, number4);
count++;
}
number3[i] = count + 48;
number4[count_n4] = number1[count_n4];
count_n4++;
number4[count_n4] = '\0';
}
number3[length_n1 - length_n2 + 1] = '\0';
int count_n5 = strlen(number4);
for (int i = 0; i < M; i++)
{
int count = 0;
number4[count_n5] ='0';
count_n5++;
number4[count_n5] = '\0';
while (!Compare(number4, number2))
{
Sub(number4, number2, number4);
count++;
}
number5[i] = count + 48;
}
number5[M] = '\0';
}
else
{
strcpy(number4, number1);
int count_n4 = strlen(number4);
for (int i = 0; i < M; i++)
{
int count = 0;
number4[count_n4] = '0';
count_n4++;
number4[count_n4] = '\0';
while (!Compare(number4, number2))
{
Sub(number4, number2, number4);
count++;
}
number5[i] = count + 48;
}
number5[M] = '\0';
number3[0] = '0';
number3[1] = '\0';
}
}
void main()
{
char number1[N];
char number2[N];
char number3[N];
char number5[N];
Input(number1, number2, N);
Devide(number1, number2, number3,number5);
Clear_Zero(number3);
printf("%s", number3);
printf(".%s", number5);
system("pause");
}