❶ 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();
}