#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h> #define MAX_LENGTH 128
#define ASSIST_LENGTH 19 int main(int argc, char **argv)
{
unsigned long long data[MAX_LENGTH] = {}, tmp = ;
int i = , j = , o_len = MAX_LENGTH - ASSIST_LENGTH;
bool c_flag = true; if (argc < )
{
printf("argument error\n");
return -;
} if (strlen(argv[]) > o_len)
{
printf("out of range\n");
return -;
} if (strlen(argv[]) > )
{
printf("out of range\n");
return -;
} tmp = atoll(argv[]); if (9223372036854775807ULL == tmp && ('' == argv[][] || '' == argv[][]))
{
printf("out of range\n");
return -;
} for (i = strlen(argv[])-; i >= ; i--)
{
data[j] = argv[][i] - ;
j++;
} for (i = o_len - ; i >= ; i--)
{
if (c_flag && == data[i])
{
continue;
} c_flag = false;
printf("%llu", data[i]);
}
printf(" * %llu\n", tmp); for (i = ; i < o_len; i++)
{
if ( == data[i])
{
continue;
} data[i] *= tmp;
} for (i = ; i < o_len; i++)
{
if ( == data[i])
{
continue;
} tmp = data[i]; for (j = ASSIST_LENGTH-; j >= ; j--)
{
data[i+j] += (tmp / (unsigned long long)pow(,j));
tmp %= (unsigned long long)pow(,j);
} data[i] %= ;
} c_flag = true;
for (i = MAX_LENGTH - ; i >= ; i--)
{
if (c_flag && == data[i])
{
continue;
} c_flag = false;
printf("%llu", data[i]);
}
printf("\n"); return ;
}

实现了任意大数与 2^64-1以下的数相乘,

两个任意大数可以将其中一个拆分成多个因子,

两个大数质数暂未考虑

linux c 实现大数相乘的更多相关文章

  1. Linux C/C++ 编程练手 --- 大数相加和大数相乘

    最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...

  2. POJ 2389 Bull Math(水~Java -大数相乘)

    题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...

  3. 大数相乘算法C++版

    #include <iostream> #include <cstring> using namespace std; #define null 0 #define MAXN ...

  4. java版大数相乘

    在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...

  5. Karatsuba乘法--实现大数相乘

    Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...

  6. leetcode 43 Multiply Strings 大数相乘

    感觉是大数相乘算法里面最能够描述.模拟演算过程的思路 class Solution { public String multiply(String num1, String num2) { if(nu ...

  7. Java 大数相乘、大数相加、大数相减

    思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...

  8. 华为上机测试题(大数相乘-java)

    PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...

  9. 求解Catalan数,(大数相乘,大数相除,大数相加)

    Catalan数 卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名.历史上,清代数学家明安图(1692年-1763年)在其<割圜 ...

随机推荐

  1. UITabbar的简单操作和实际应用

     简易编辑Tabbar //**标签栏控制器的初始化 UITabBarController * tabbarC = [[UITabBarController alloc] init]; //设置tab ...

  2. Oracle 基础 <2> --函数

    一:函数的定义 函数是用于返回特定数据的PL/SQL程序块 (函数必须返回一个值) 语法: create [or replace] function function_name--函数名称 [(par ...

  3. CentOS6.5下用yum安装 git

    cd /etc/yum.repos.d/ wget http://geekery.altervista.org/geekery-el6-x86_64.repo 2. 到http://packages. ...

  4. Differential Geometry之第一章欧式空间

    书籍:<微分几何>彭家贵 局部微分几何 第一章.欧式空间 1.1向量空间 (1)向量空间 a.向量空间是集合,集合中的元素需要定义加法和乘法运算.向量空间和n维数组空间R^n不是同一个概念 ...

  5. 开启Microsoft SQL Management时,如果出现"未能加载包

    Ms Sql server 2005在开启Microsoft SQL Management时,如果出现"未能加载包“Microsoft SQL Management Studio Packa ...

  6. Android TintResources Leak

    在使用Android WebView的时候,可能会造成Activity的内存泄漏,这个是Android的Bug,目前发现在WebView内部在使用TintResources时会发生内存泄漏,但是在ap ...

  7. Warning: Permanently added '...' (RSA) to the list of known hosts --Windows下git bash 警告处理

    原链接地址 StackOverflow 处理方法: 创建文件~/.ssh/config, 此处对应windows当前用户目录下的.ssh文件夹 增加如下语句 UserKnownHostsFile ~/ ...

  8. Dos下查询关闭端口的命令例子

    1. 查看端口占用 在windows命令行窗口下执行: netstat -aon|findstr "8080" TCP     127.0.0.1:80         0.0.0 ...

  9. [javascript|基本概念|Boolean]学习笔记

    Boolean类型的值:true/false ECMAScripe所有类型的值都有与这Boolean值等价的值 将一个值转换为其对应的Boolean值,可调用转型函数Boolean(),返回的值取决于 ...

  10. iOS Foundation框架 -2.常用集合类简单总结

    Foundation框架中常用的类有:NSString.NSArray.NSSet.NSDictionary 以及它们对应的子类 NSMutableString.NSMutableArray.NSMu ...