| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 807 人关注过本帖
标题:帮个忙啊,这个程序如果写成dll该怎么写?
只看楼主 加入收藏
ak47my
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:229
专家分:0
注 册:2005-12-2
收藏
 问题点数:0 回复次数:2 
帮个忙啊,这个程序如果写成dll该怎么写?
程序代码:
#include<stdio.h>
#include<string.h>
#define N 1001
int compare(char * c1,int s1,int e1,char *c2,int s2,int e2)/*大整数比较大小*/
{
    while(c1[s1]=='0'&&s1<e1)s1++;
    while(c2[s2]=='0'&&s2<e2)s2++;
    if(e1-s1>e2-s2)return 1;
    if(e1-s1<e2-s2)return -1;
    int i1;int f11=0;
    for(i1=0;i1<=e1-s1;i1++)
    {
        if(c1[s1+i1]>c2[s2+i1]){f11=1;break;}
        if(c2[s2+i1]>c1[s1+i1])break;
    }
    if(i1>e1-s1)return 0;
    if(f11)return 1;
    return -1;
}
void sub(char *c1,int l1,char *c2,int n,int l)/*两个大整数相减,结果放在c1中*/
{
    int fig=0;
    if(l1>l)
    {
        fig=1;
        int i5;
        for(i5=l;i5>0;i5--)
            c2[i5]=c2[i5-1];
        c2[0]='0';l++;
    }
    int jw=0;
    int i4;
    char tc[N];
    for(i4=l-1;i4>=0;i4--)
    {
        tc[i4]=((c2[i4]-48)*n+jw)%10+48;
        jw=((c2[i4]-48)*n+jw)/10;
    }
    jw=0;
    for(i4=l-1;i4>=0;i4--)
    {
        int ttt=jw;
        if(c1[i4]-tc[i4]-jw>=0)
        {
            tc[i4]=c1[i4]-tc[i4]-jw+48;
            jw=0;
        }
        else
        {

            jw=(tc[i4]-c1[i4]+jw);
            if(jw%10==0)jw/=10;
            else jw=jw/10+1;
            tc[i4]=jw*10+c1[i4]-tc[i4]-ttt+48;
        }
    }
    if(fig)
    {
        for(i4=0;i4<l-1;i4++)c2[i4]=c2[i4+1];
        l--;
        c2[l]='\0';
    }
    tc[l1]='\0';
    for(i4=0;i4<=l1;i4++)
        c1[i4]=tc[i4];
}       
void high_precise_division(char *c1,char *c2)
{
    int len1,len2;
    len1=strlen(c1);
    len2=strlen(c2);
    int i,j,k,ip;
    i=0;
    while(c1[i]=='0'&&i<len1-1)i++;
    for(j=0;i<len1;j++,i++)c1[j]=c1[i];
    len1=j;c1[j]='\0';
    i=0;
    while(c2[i]=='0'&&i<len2-1)i++;
    for(j=0;i<len2;j++,i++)c2[j]=c2[i];
    len2=j;c2[j]='\0';
    /*while(c1[0]=='0'&&i<len1-1)
    {
        for(k=0;k<len1-1;k++)
            c1[k]=c1[k+1];
        len1--;
    }去掉前面的0*/
    /*while(c2[0]=='0'&&j<len2-1)
    {
        for(k=0;k<len2-1;k++)
            c2[k]=c2[k+1];
        len2--;
    }去掉前面的0*/
    c1[len1]='\0';
    c2[len2]='\0';
    if(strcmp(c2,"0")==0)return ;/*当除数为0时*/
    if(strcmp(c1,"0")==0){strcpy(c2,"0");return ;}/*当被除数为0时*/
    if(len1<len2||len1==len2&&compare(c1,0,len1-1,c2,0,len2-1)<0)
    {
        strcpy(c2,c1);
        c1[0]='0';c1[1]='\0';
        return ;
    }
    else
    {
        ip=0;
        char product[N],*pr;/*部分积*/
        pr=product;
        for(ip=0;ip<len2-1;ip++)
            pr[ip]=c1[ip];
        for(i=0;i<=len1-len2;i++)
        {
            pr[ip++]=c1[len2-1+i];
            if(ip>=len2&&compare(pr,0,ip-1,c2,0,len2-1)>=0)
            {
                char tc[N];
                for(j=1;j<=9;j++)
                {
                    for(k=0;k<ip;k++)tc[k]=pr[k];   
                    sub(tc,ip,c2,j,len2);/*pr-c2*j结果放在pr中*/
                    for(k=0;tc[k]!='\0';k++);
                    if(compare(tc,0,k-1,c2,0,len2-1)<0)
                        break;
                }
                strcpy(pr,tc);
                ip=strlen(pr);
                c1[i]=j+48;
                while(pr[0]=='0'&&ip>1)
                {
                    for(j=0;j<ip-1;j++)
                        pr[j]=pr[j+1];
                    ip--;
                }
                if(ip==1&&pr[0]=='0')ip--;
            }
            else c1[i]='0';
        }
        while(c1[0]=='0')
        {
            for(j=0;j<i-1;j++)
                c1[j]=c1[j+1];
            i--;
        }
        c1[i]='\0';
        if(ip==0){pr[0]='0';pr[1]='\0';ip=1;}
        else
        {
            while(pr[0]=='0'&&ip>1)
            {
                for(j=0;j<ip-1;j++)pr[j]=pr[j+1];
                ip--;
            }
        }
        for(j=0;j<ip;j++)
            c2[j]=pr[j];
        c2[ip]='\0';
        return ;
    }
}
int main()
{
    int i,j;
    char c1[N],c2[N];/*整数高精度除法*/
    while(scanf("%s %s",c1,c2)!=EOF)
    {
        char *pc1,*pc2;
        pc1=c1;pc2=c2;
        c1[strlen(c1)]='\0';
        c2[strlen(c2)]='\0';
        high_precise_division(pc1,pc2);/*结果放在pC1中,余数放在pC2中*/              
        printf("  商:%s\n余数:%s\n",pc1,pc2);
    }
    return 0;
}

这个程序如果写成dll可以实现吗?或者com
我对c++不熟不会弄.有谁能帮忙吗?
搜索更多相关主题的帖子: dll 
2009-12-02 13:49
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
先用编译器生成一个DLL工程,以VC2008为例,在创建工程时选择创建WIN控制台,在应用程序设置时,选择DLL,这样就生成了DLL工程,其中dllmain.cpp文件是主函数所在文件。将上面的代码加入到工程,新建文件或是直接复制到dllmain.cpp文件里,其中的main()主函数改成一个函数 voic Run(void)
修改主函数
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        {
            assert(NULL!=hModule);
            DWORD threed = 0 ;
            HANDLE hThread = CreateThread( 0 , 0 , (LPTHREAD_START_ROUTINE)Run, NULL ,CREATE_NEW_CONSOLE , &threed) ;
            if(hThread   !=   NULL)
            {
                CloseHandle(hThread);
            }
        }        
        break ;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
2009-12-17 21:35
CzltKing
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-1-15
收藏
得分:0 
回复 2楼 debroa723
谢谢,学习一下,为什么要这样改啊,有没有更详细的质料啊,我想学习!!
2010-01-15 17:34
快速回复:帮个忙啊,这个程序如果写成dll该怎么写?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025045 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved