❶ c语言大整数乘法
scanf("%s%s",&a,&b);
我学两天C直接就学JAVA了。
说下我的看法吧。
a[i]-'0'
//a[i]比如i为10你里面都没赋值这个值我觉得是随机的,因为操作系统与编译器没必要对于所引用的地址进行操作。
而且减'0'虽然'0'可以转化成asc2码,但是这样做应该不行吧。。。
或者相乘超过了2的8次(c[i+j+1]不能存放这么多位,地址溢出)。
❷ C语言 如何计算长整型乘法
是32*5吧。
long int只是表示的数位多一点吧。
如果超过了的话,就会溢出。
将得出结果的long转化为字符串来保存。
------------
水平不高。
希望对你有用。
❸ c语言如何实现两个整数的乘法运算
亲测可用
long jiecheng(int x)
{
long int i,k=1;
for(i=1;i<=x;i++)
k=k*i;
return k;
}
int main()
{
long int j,k=0;
int i;
for(i=1;i<=20;i++)
{
j=jiecheng(i);
k+=j;
}
printf("%ld ",k);
}
输出的结果是2561327494111820313
(3)超整形乘积c语言算法扩展阅读:
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。
亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
计算方法:
大于等于1:
任何大于等于1 的自然数n 阶乘表示方法:n! =1×2×3×...×(n-1)n或n! = n×(n-1)!
0的阶乘:0!=1。
参考资料:网络——阶乘
❹ 编写一个求两个整数乘积的c语言程序
#include<stdio.h>
intmain(void)
{
intx,y;
printf("请输入数字,空格分割 ");
scanf("%d%d",&x,&y);
printf("结果是%d ",x*y);
return0;
}
❺ C语言 1乘以到30怎么计算啊
楼主,你可以尝试floatproct=1;
输出是控制一下就可以了%.0f
#include<stdio.h>
voidmain()
{
floatproct=1;
for(inti=1;i<=30;i++)proct*=i;
printf("1到30的乘积为%.0f ",proct);
}
---------------------------------
上面的可以实现啊
❻ C语言大整数相乘
我用C语言写了一个,在VC2005下测试通过。
#include <stdio.h>
#include <string.h>
typedef unsigned char CHAR;
typedef unsigned int UINT;
/*十进制形式的a与b,注意低位在前高位在后*/
CHAR a[10000];/*被乘数*/
CHAR c[20000];/*乘积和乘数*/
UINT temp1,temp2;/*用来存放中间结果*/
UINT da, db; /*记录a和b的位数*/
/*清零*/
void Zero( CHAR* x, UINT n )
{
UINT i;
for ( i = 0; i < n; i ++ )
x[i] = '0';
}
CHAR CharToNum( CHAR c )
{
return c - 0x30;
}
CHAR NumToChar( CHAR c )
{
return c + 0x30;
}
/*这个函数模拟大整数的左移*/
void LShift( CHAR* x, int digits )
{
UINT i;
for ( i = 0; i < digits - 1; i ++ ) {
x[i] = x[i+1];
}
x[digits] = 0;
}
/*这个乘法函数计算大整数a与给定的y的乘积,乘积加入c右半部*/
void OneDigitMultiply( UINT y )
{
UINT i;
UINT cm = 0; /*乘法进位*/
UINT ca = 0; /*加法进位*/
if ( y != 0 ) {
for ( i = 0; i < da; i ++ ) {
/*乘*/
temp1 = ((UINT)a[i]) * y + cm;
cm = temp1 / 10;
temp1 %= 10;
/*加*/
temp2 = ((UINT)c[i+10000]) + temp1 + ca;
if ( temp2 > 9 ) {
ca = 1;
temp2 -= 10;
} else {
ca = 0;
}
c[i+10000] = temp2;
}
c[da+10000] += cm + ca;
}
else {
/*如果被乘数本位是0就直接返回*/
return;
}
}
/*这个函数用来输出*/
void OutputResult()
{
CHAR* p = c + 20000;
while( *p == 0 ) {
p --;
}
printf("乘积是:\n");
while( *p != 'x' ) {
printf("%d", *p);
p --;
}
}
void main()
{
Zero( a, 10000 );
Zero( c, 10000 );
printf("输入被乘数:");
scanf("%s",a);
printf("输入乘数:");
scanf("%s",c);
/*记录位数*/
da = strlen( (const char*)a );
db = strlen( (const char*)c );
/*反转以使低位在前*/
strrev( (char*)a );
strrev( (char*)c );
UINT i;
/*a与b存储的是char字符,减去0x30就能直接当数字使用了*/
for ( i = 0; i < 10000; i ++ ) {
if ( a[i] != '\0' ) {
a[i] = CharToNum( a[i] );
}
}
for ( i = 0; i < 20000; i ++ ) {
if ( c[i] != '\0' ) {
c[i] = CharToNum( c[i] );
}
}
/*这个乘法算法可以参看二进制乘法器的原理*/
for ( i = 0; i < db; i ++ ) {
OneDigitMultiply( c[0] );
LShift(c, 20000);
}
c[10000-db-1] = 'x'; /*给数字尾部作个标记*/
OutputResult();
getchar();
getchar();
}
第二题:
#include <stdio.h>
void main()
{
float a;
scanf("%f",&a);
if ( a - (int)a == 0 ) {
printf("是整数\n");
}
else {
printf("不是整数\n");
}
getchar();
getchar();
}