大整数除法,C语言基础语法实现

#include<stdio.h>
#include<string.h>
#define N 2004
void change(char c[],int n[]);
int Sub(int *a,int *b,int lena,int lenb);
int main()
{
    char x[N],y[N];
    int a[N]={0},b[N]={0};
    scanf("%s %s",x,y);
    change(x,a);
    change(y,b);
    int lena=strlen(x);
    int lenb=strlen(y);
    int ans[N]={0};
    if(lena<lenb)
    printf("0\n");
    else
    {
        int s=Sub(a,b,lena,lenb);
        if(s<0)
        printf("0\n");
        else if(s==0)
        printf("1\n");
        else
        {
            int i,j;
            lena=s;
            ans[0]++;
            int ntimes=lena-lenb;
            for(i=lena;i>=0;i--)
            if(i>=ntimes)
            b[i]=b[i-ntimes];
            else
            b[i]=0;
            lenb=lena;
            for(j=0;j<=ntimes;j++)
            {
                int buffer;
                while(1)
                {
                    
                    buffer=Sub(a,b+j,lena,lenb-j);
                    if(buffer<0)
                    break;
                    ans[ntimes-j]++;
                    lena=buffer;
                }
            }
            for(i=0;i<=ntimes;i++)
            if(ans[i]>9)
            {
                ans[i+1]+=ans[i]/10;
                ans[i]=ans[i]%10;
            }
            for(i=ntimes;i>=0;i--)
            printf("%d",ans[i]);
            printf("\n");
        }
    }
    return 0;
}

void change(char c[],int n[])
{
    int i,j=0;
    for(i=strlen(c)-1;i>=0;i--)
    n[j++]=c[i]-‘0‘;
}
int Sub(int *a,int *b,int lena,int lenb)
{
    int i,f=0;
    if(lena<lenb)
    return -1;
    else if(lenb==lena)
    {
        for(i=lena-1;i>=0;i--)
        {
            if(a[i]<b[i])
            return -1;
            else if(a[i]>b[i])
            break;
        }
    }
    for(i=0;i<lena;i++)
    {
        a[i]-=b[i];
        if(a[i]<0)
        {
            a[i]+=10;
            a[i+1]--;
        }
    }
    for(i=lena-1;i>=0;i--)
    {    
        if(a[i]!=0)
        return i+1;
    }    
    return 0;
}
若转载,请注明,谢谢!

时间: 2024-12-16 10:14:32

大整数除法,C语言基础语法实现的相关文章

嵌入式linux C++语言(二)——C++对C语言基础语法的扩展

嵌入式linux C++语言(二)--C++对C语言基础语法的扩展 C++是基于C语言扩展发展而来的面向对象的程序设计语言,本文将主要讨论C++语言基于C语言扩展的方面. 一.类型增强 1.类型检查更严格 在C语言中: const int a = 100; int *p = &a; 在C++语言中: const int a = 100;//必须在定义的时候初始化 const int *p = &a; 在C++语言中不能隐式转换数据类型. error: invalid conversion

黑马程序员 ---- C 语言基础语法

C 语言基础语法 C程序是由函数组成. C程序的入口是一个名字叫做 main 的函数,简称main函数. 不管程序中有多少函数,都是先执行main函数. 1 #include <stdio.h> 2 3 int main(void) 4 5 { 6 7 return 0; 8 9 } 1.编写 2.编译 cc -c 文件名.c 生成 .o 文件 3.链接 cc 文件名.o      // 2.3结合在一起:  cc 文件名.c -o 文件名 4.运行 ./a.out // ./文件名 C语言中

C++语言学习(二)——C++对C语言基础语法的扩展

C++语言学习(二)--C++对C语言基础语法的扩展 C++是基于C语言扩展发展而来的面向对象的程序设计语言,本文将主要讨论C++语言基于C语言扩展的方面. 一.实用性增强 C语言中变量的定义必须在作用域开始的位置进行定义. #include <stdio.h> int main(int argc, char *argv[]) { int i;//定义变量 int j; //使用变量 for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++)

Go 语言基础语法

Go 语言基础语法 上一章节我们已经了解了 Go 语言的基本组成结构,本章节我们将学习 Go 语言的基础语法. Go 标记 Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号.如以下 GO 语句由 6 个标记组成: fmt.Println("Hello, World!") 6 个标记是(每行一个): 1. fmt 2. . 3. Println 4. ( 5. "Hello, World!" 6. ) 行分隔符 在 Go 程序中,一行代表一个语句

go语言基础语法

go语言基础语法 定义变量在go语言中有两种定义变量的方法: var的方式,如下var a = 1将a变量赋值1 第二种方式 ":=",如下:a := 1和上述一样,将a变量赋值1 `注: 变量名 := 变量值,这种方式只适用于第一次赋值变量时,如果变量已赋值,如上的a已经赋值为1,此时如果想重新赋值在使用a := 2这种方式会报错,更改赋值直接a = 2即可` 定义函数:在go语言中没有class关键字,没有类的概念,go主要是面向函数和面向接口的编程语言.定义函数的关键字 func

黑马程序员——C语言——基础语法

首先学的是C语言的基础语法,主要分为关键字.标示符.注释.数据.常量.变量. 一.关键字 1   关键字是指在C语言中系统默认的有特殊意义的字符 2   关键字全部是小写字母表示,总共32个关键字(主函数[main]中int .return),如下: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned

C语言——基础语法

首先学的是C语言的基础语法,主要分为关键字.标示符.注释.数据.常量.变量. 一.关键字 1   关键字是指在C语言中系统默认的有特殊意义的字符 2   关键字全部是小写字母表示,总共32个关键字(主函数[main]中int .return),如下: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned

2737 大整数除法

题目来源:http://bailian.openjudge.cn/practice/2737/描述求两个大的正整数相除的商.输入第1行是被除数,第2行是除数.每个数均不超过100位.输出一行,相应的商的整数部分样例输入237624样例输出99题意描述:计算位数不超过200的两个大整数的商解题思路:总体用减法来模拟除法,当然为了让模拟更高效采用一定的方法. 先将被除数和除数分别存进一维字符数组str1和str2如果被除数的长度小于除数的,直接输出0逆置str1和str2存进数组a和b调用jiand

高精度计算-大整数除法

问题描述 求两个大的正整数相除的商 输入数据 第 1 行是测试数据的组数 n,每组测试数据占 2 行,第 1 行是被除数,第 2 行是除数. 每组测试数据之间有一个空行,每行数据不超过 100 个字符 输出要求 n 行,每组测试数据有一行输出是相应的整数商 解题思路 基本的思想是反复做减法,看看从被除数里最多能减去多少个除数,商就是多少.一个一个减显然太慢,如何减得更快一些呢?以 7546 除以 23 为例来看一下:开始商为 0.先减去 23 的 100 倍,就是 2300,发现够减 3 次,余